No se puede obtener el valor del campo de entrada JSF en el backend JAVA
-
06-07-2019 - |
Pregunta
Tengo la siguiente parte de la interfaz de usuario en JSF: es un formulario de búsqueda simple con campo de entrada y envío:
<h:form>
<h:commandButton action="#{operation.found}" value="#{msg.search}" />
<h:inputText name="searchParam"/>
</h:form>
Y correspondientemente, en el backend, intento obtener el valor del campo de entrada de la siguiente manera:
public List<Store> getFound() {
String name = (String) FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get(
"searchParam");
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
HibernateTemplate hbt = new HibernateTemplate();
hbt.setSessionFactory(sessionFactory);
foundStores = hbt.find(BEAN_PATH + " WHERE name = ?",
new Object[] { name });
return foundStores;
}
Y el nombre nulo se pasa al backend.
Parece que el problema en la parte .jsf, pero a primera vista parece estar bien ...
Solución
Debe apuntar el <h:inputText>
a una propiedad de bean administrado:
<h:inputText name="searchParam" value="#{searchBean.searchParam}" />
y define en tu bean:
private String searchParam;
public String getSearchParam() {..}
public void setSearchParam(String searchParam) {..}
y luego use searchParam en su getFound()
método;
Por supuesto, debe tener el bean definido como bean administrado, pero supongo que lo ha hecho:
<managed-bean>
<managed-bean-name>searchBean</managed-bean-name>
<managed-bean-class>mypackage.SearchBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Puede consultar un tutorial de JSF (como esto , para ejemplo)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow