Kann ich einen Eingabetextfeldwert an eine Bean-Methode übergeben, ohne den Wert an eine Bean-Eigenschaft zu binden?
<h:inputText value="#{myBean.myProperty}" />
<h:commandButton value="Test" action="#{myBean.execute()} />
Kann ich dies tun, ohne vorübergehend in #{myBean.myProperty}
Zu speichern?
Binden Sie die Komponente als UIInput
an die Ansicht und übergeben Sie mit UIInput#getValue()
ihren Wert als Methodenargument.
<h:inputText binding="#{input1}" />
<h:commandButton value="Test" action="#{myBean.execute(input1.value)}" />
mit
public void execute(String value) {
// ...
}
Beachten Sie, dass der Wert auf diese Weise bereits wie gewohnt in JSF konvertiert und validiert wurde.
Sie können die Parameter des Formulars wiederherstellen, indem Sie die Anforderung abrufen und plain Java EE ServletRequest # getParameter verwenden. Denken Sie bei dieser Methode daran, die ID und den Namen festzulegen Ihrer Komponenten:
<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>
Managed Bean:
@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);
}
}
Ein weiterer Thread mit mehr Infos: