Impossible d'obtenir la valeur du champ de saisie JSF sur le backend JAVA
-
06-07-2019 - |
Question
J'ai la partie suivante de l'interface utilisateur sur JSF - c'est un simple formulaire de recherche avec champ de saisie et envoi:
<h:form>
<h:commandButton action="#{operation.found}" value="#{msg.search}" />
<h:inputText name="searchParam"/>
</h:form>
Et en conséquence, sur le backend, j'essaie d'obtenir la valeur du champ de saisie de la manière suivante:
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;
}
Et le nom null est passé au serveur.
Il semble que ce problème se produise dans la partie .jsf, mais à première vue, cela semble aller ...
La solution
Vous devez pointer le <h:inputText>
sur une propriété de bean géré:
<h:inputText name="searchParam" value="#{searchBean.searchParam}" />
et définissez dans votre bean:
private String searchParam;
public String getSearchParam() {..}
public void setSearchParam(String searchParam) {..}
puis utilisez searchParam dans votre getFound()
méthode;
Bien sûr, vous devez définir le bean en tant que bean géré, mais je suppose que vous l'avez déjà fait:
<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>
Vous pouvez consulter un didacticiel JSF (tel que this , pour exemple)