Can I pass a input text field value to a bean method without binding the value to a bean property?
<h:inputText value="#{myBean.myProperty}" /> <h:commandButton value="Test" action="#{myBean.execute()} />
Can I do this without doing temporary save in #{myBean.myProperty}
?
Bind the component as UIInput
to the view and use UIInput#getValue()
to pass its value as method argument.
<h:inputText binding="#{input1}" /> <h:commandButton value="Test" action="#{myBean.execute(input1.value)}" />
with
public void execute(String value) { // ... }
Note that the value is this way already converted and validated the usual JSF way.
You can recover the parameters of the form by getting the Request and using plain Java EE ServletRequest#getParameter. When you use this method, remember to set the id and name of your components:
<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); } }
Another thread with more info:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With