Представленные значения формы не обновляются в модели при добавлении <f: ajax> в <h: commandButton>
Я изучаю, как использовать ajax в jsf, я сделал страницу, которая фактически ничего не представляет, текст ввода, который заполняется числом, представленный на сервере, вызывает установщик для этого элемента со значением, представленным, и отобразите значение геттера.
Вот простой bean код:
@ManagedBean(name="helper",eager=true)
public class HealthPlanHelper {
String random = "1";
public void setRandomize(String s){
random = s;
System.out.println("Calling setter");
}
public String getRandomize(){
return random;
}
}
И страница jsf:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head></h:head>
<h:body>
<h:form>
<h:commandButton action="nothing">
<f:ajax render="num"/>
</h:commandButton>
<h:inputText value="#{helper.randomize}" id="num"/>
</h:form>
</h:body>
</html>
Как вы видите, это область с привязкой к запросу bean, всякий раз, когда я нажимаю кнопку, сервер показывает, что он создает экземпляр bean, но метод setter никогда не вызывается, таким образом, getter возвращает всегда "1" в качестве значения строки.
Когда я удаляю сеттер, вызывается нормально.
Ответы
Ответ 1
<f:ajax>
обрабатывает по умолчанию только текущий компонент (читать описание атрибута execute
). В принципе, ваш код точно такой же:
<h:form>
<h:commandButton action="nothing">
<f:ajax execute="@this" render="num"/>
</h:commandButton>
<h:inputText value="#{helper.randomize}" id="num"/>
</h:form>
В эффектах обрабатывается только <h:commandButton action>
, и <h:inputText value>
(и любое другое поле ввода, если оно есть) полностью игнорируется.
Вам нужно изменить атрибут execute
, чтобы явно указать компоненты или разделы, которые вы хотите обработать во время запроса ajax. Обычно для обработки всей формы используется @form
:
<h:form>
<h:commandButton action="nothing">
<f:ajax execute="@form" render="num"/>
</h:commandButton>
<h:inputText value="#{helper.randomize}" id="num"/>
</h:form>
См. также: