Мне удалось запустить обычную страницу ViewScoped. Я не знаю, то ли я чего-то не понимаю, то ли эта страница работает не так, как должна. Каждый запрос создает новый объект Test
, даже если это ViewScoped, и я никогда не смогу вернуть установленную переменную theString
.
Простой шаблон с полем ввода, кнопкой для установки значения и кнопкой для обновления отображаемого значения:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<f:view contentType="text/html">
<h:head>
</h:head>
<h:body>
<h:form>
<p:commandButton process="theInput" value="Set value" />
<p:inputText id="theInput" value="#{test.theString}" /> --
</h:form>
<h:form>
<p:commandButton process="theArea" update="theArea" value="Display value" />
</h:form>
<h:panelGroup id="theArea">
#{test.theString}
</h:panelGroup>
</h:body>
</f:view>
</html>
Бин:
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;
@ManagedBean(name = "test")
@ViewScoped
public class Test implements Serializable {
private String theString = "initial";
public String getTheString() {
return theString;
}
public void setTheString(String theString) {
this.theString = theString;
}
}
Я использую Mojarra 2.2.7, Primefaces 5.2 и Glassfish 4.1.
Разве объект Test
не должен сохранять свое состояние? Есть ли что-то, что мне здесь не хватает?
@ViewScoped
? Их два: один для управляемых компонентов JSF, а другой — для управляемых компонентов CDI. Javadoc сообщает, какой из них для какого. - person BalusC   schedule 01.05.2015import javax.faces.view.ViewScoped;
. Я только что увидел, что также можно импортироватьimport javax.faces.bean.ViewScoped;
. Попробую тот. - person Varis   schedule 01.05.2015