Подтвердить что ты не робот

Передайте текстовое значение ввода методу bean без привязки входного значения к свойству bean

Могу ли я передать значение входного текстового поля методу bean без привязки значения к свойству bean?

<h:inputText value="#{myBean.myProperty}" />
<h:commandButton value="Test" action="#{myBean.execute()} />

Могу ли я сделать это без временного сохранения в #{myBean.myProperty}?

4b9b3361

Ответ 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);
    }
}

Еще одна тема с дополнительной информацией: