Передайте текстовое значение ввода методу bean без привязки входного значения к свойству bean
Могу ли я передать значение входного текстового поля методу bean без привязки значения к свойству bean?
<h:inputText value="#{myBean.myProperty}" />
<h:commandButton value="Test" action="#{myBean.execute()} />
Могу ли я сделать это без временного сохранения в #{myBean.myProperty}
?
Ответы
Ответ 1
Привяжите компонент как UIInput
к виду и используйте UIInput#getValue()
, чтобы передать его значение как аргумент метода.
<h:inputText binding="#{input1}" />
<h:commandButton value="Test" action="#{myBean.execute(input1.value)}" />
с
public void execute(String value) {
// ...
}
Обратите внимание, что это значение уже конвертировано и проверено обычным способом JSF.
См. также:
Ответ 2
Вы можете восстановить параметры формы, получив запрос и используя простой Java EE ServletRequest # getParameter. Когда вы используете этот метод, не забудьте указать идентификатор и имя ваших компонентов:
<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:
@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);
}
}
Еще одна тема с дополнительной информацией: