Impossibile ottenere il valore del campo di input JSF sul backend JAVA
-
06-07-2019 - |
Domanda
Ho seguito la parte dell'interfaccia utente su JSF: è un semplice modulo di ricerca con campo di immissione e invio:
<h:form>
<h:commandButton action="#{operation.found}" value="#{msg.search}" />
<h:inputText name="searchParam"/>
</h:form>
E di conseguenza, nel backend, cerco di ottenere il valore del campo di input nel modo seguente:
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;
}
E il nome null viene passato al backend.
Sembra quel problema nella parte .jsf, ma a prima vista sembra ok ...
Soluzione
È necessario puntare <h:inputText>
su una proprietà del bean gestito:
<h:inputText name="searchParam" value="#{searchBean.searchParam}" />
e definisci nel tuo bean:
private String searchParam;
public String getSearchParam() {..}
public void setSearchParam(String searchParam) {..}
e quindi utilizza searchParam nel tuo getFound()
metodo;
Ovviamente, devi avere il bean definito come bean gestito, ma suppongo che tu l'abbia fatto:
<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>
Puoi controllare un tutorial JSF (come this , per esempio)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow