Puis-je transmettre une valeur de champ de texte d'entrée à une méthode de bean sans lier la valeur à une propriété de bean?
<h:inputText value="#{myBean.myProperty}" />
<h:commandButton value="Test" action="#{myBean.execute()} />
Puis-je faire cela sans faire de sauvegarde temporaire dans #{myBean.myProperty}
?
Liez le composant sous la forme UIInput
à la vue et utilisez UIInput#getValue()
pour transmettre sa valeur comme argument de méthode.
<h:inputText binding="#{input1}" />
<h:commandButton value="Test" action="#{myBean.execute(input1.value)}" />
avec
public void execute(String value) {
// ...
}
Notez que la valeur est de cette façon déjà convertie et validée de la manière habituelle JSF.
Vous pouvez récupérer les paramètres du formulaire en obtenant la demande et en utilisant plain Java EE ServletRequest # getParameter . Lorsque vous utilisez cette méthode, n'oubliez pas de définir l'identifiant et le nom de vos composants:
<h:form id="myForm">
<h:inputText id="txtProperty" /> <!-- no binding here -->
<input type="text" id="txtAnotherProperty" name="txtAnotherProperty" />
<h:commandButton value="Test" action="#{myBean.execute()} />
</h:form>
Bean géré:
@ManagedBean
@RequestScoped
public class MyBean {
public void execute() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String txtProperty = request.getParameter("myForm:txtProperty");
//note the difference when getting the parameter
String txtAnotherProperty= request.getParameter("txtAnotherProperty");
//use the value in txtProperty as you want...
//Note: don't use System.out.println in production, use a logger instead
System.out.println(txtProperty);
System.out.println(txtAnotherProperty);
}
}
Un autre fil avec plus d'informations: