JSF ViewScope - возвращение нулевого значения при действиях не обновляет представление
У меня есть управляемый компонент в режиме ViewScope. Поэтому, когда я вызываю какое-либо действие из этого управляемого компонента, моя страница не обновляется. Я вижу, что мое действие вызывается хорошо и возвращает ноль (рабочий процесс видимости в порядке).
Итак, что я делаю не так?
Если я перерисовываю страницу с помощью Ajax, она работает нормально.
РЕДАКТИРОВАТЬ:
Мои версии:
JSF 2.1.14 с Primefaces 3.4.1
Мой код:
@ManagedBean(name = "test")
@ViewScoped
public class TestMB implements Serializable {
private String status;
public String getStatus() { return this.status; }
public void setStatus(String status) { this.status = status; }
public String changeStatus() {
this.status = "ViewScope Works!";
return null;
}
}
Моя страница:
<!DOCTYPE HTML>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
template="/template/ui.xhtml">
<ui:define name="head">
</ui:define>
<ui:define id="teste" name="content">
<h:form id="form">
<h:outputText id="status" value="OK?: #{test.status}" />
<p:commandButton id="myAction" value="Do it!" action="#{test.changeStatus}" />
</h:form>
</ui:define>
</ui:composition>
На моем экране переменная состояния не изменяется. И да.. действие называется ОК. Какой-нибудь совет?
1 ответ
Вы использовали <p:commandButton>
отправить форму. По умолчанию он отправляет запрос ajax. По умолчанию ничего не обновляется. Таким образом, поведение, которое вы наблюдаете, вполне ожидаемо. Есть несколько способов решить эту "проблему" (цитируется, так как на самом деле это не проблема, а просто концептуальное недоразумение):
Скажите это, чтобы не использовать ajax.
<p:commandButton ... ajax="false" />
Скажите это, чтобы обновить форму.
<p:commandButton ... update="@form" />
Заменить стандартным компонентом JSF, который по умолчанию не использует ajax.
<h:commandButton ... />
Обратите внимание, что эта конкретная проблема не связана с самой областью представления. У вас будет точно такая же проблема (с точно такими же решениями) при использовании другой области, включая область запроса.