Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass input text value to bean method without binding input value to bean property

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}?

like image 695
membersound Avatar asked Aug 13 '12 20:08

membersound


2 Answers

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.

See also:

  • How does the 'binding' attribute work in JSF? When and how should it be used?
  • JSF component binding without bean property
like image 56
BalusC Avatar answered Sep 17 '22 22:09

BalusC


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:

  • Get request parameter values in JSF
like image 25
Luiggi Mendoza Avatar answered Sep 20 '22 22:09

Luiggi Mendoza