运行JSF
,Primefaces
,eclipselink
的应用,不是一个小应用,大约100页/ bean都可以正常运行
在了解@ViewScoped
页面的工作方式时遇到了一些麻烦,我得到了一个select
UI组件,其中包含一个简单的List<People>
和一个后端selectedPeople
豆
// all getters, setters, JPA annotations, all good
public class People {
private String name;
private List<Car> cars;
}
@ManagedBean
@ViewScoped
public class PeopleBean {
@EJB
private Service sPeople;
private People selectedPeople;
private List<People> listPpl;
@PostConstruct
public void init(){
listPpl = sPeople.readAll(); // always good, same as DB values
}
public People getSelectedPeople(){
return selectedPeople;
}
public People setSelectedPeople(People p){ // p is an old element
selectedPeople = p; // BREAKPOINT
}
// getter for the list too
public void method(){
Logger.getAnoymousLogger().severe(selectedPeople.getCars()); // the one the old people, not the ne contained in the actual list
}
}
<p:selectOneMenu id="selectP" value="#{peopleBean.selectedPeople}" converted="#{genericSecuerdConverter}" >
<p:ajax event="change" partialSubmit="true" listener="#{peopleBean.method()}" />
<f:selectItems value="#{peopleBean.listPpl}" var="people" itemLabel="#{people.name}" itemValue="#{people}" />
</p:selectOneMenu>
使用和出现问题的顺序是(调试信息):
peoplePage.xhtml
,其中select元素位于,列表元素的IDs
为#410, #411, #412
(3个人)modif.xhtml
,更改第3个人(删除car
,保存在数据库中(在数据库中签入))peoplePage.xhtml
,列表确定,调试中的IDs
是#650, #651, #652
null
)以选择人员,在断点处,p
似乎是#412
元素,因此它的车清单上的更改是不可见的,它不是来自listPpl
(因为它仅包含有效元素并且对应于DB),因此属于缓存我试图禁用 ecpliselink 缓存为状态EclipleLink cache
@Cacheable(false)
没有人起作用,也没有人进入私有导航,也没有清除浏览器缓存并返回页面,p
元素仍然是第一次加载时的旧元素
我认为@ViewScoped
允许每次都打开页面,好像是第一次一样,但似乎不行,无法弄清楚可以在哪里存储/缓存元素
编辑我暂时使用了一种解决方法,但这显然是最好的解决方案
public People setSelectedPeople(People p){
if(p!=null)
selectedPeople = sPeople.read(p.getId());
}
答案 0 :(得分:0)
您要寻找的是@RequestScoped
。每当您执行适当的HTTP请求时,它将创建所有内容。否则,不能保证销毁@ViewScoped
bean。 Omnifaces文档中的一个示例:ViewScoped。
例如,当用户使用浏览器的后退和前进按钮时,此功能可用于帮助重新创建页面。
@RequestScoped 只要HTTP请求-响应存在,Bean就会存在。它是根据HTTP请求创建的,并在与HTTP请求关联的HTTP响应完成时被销毁。
@ViewScoped 只要用户与浏览器窗口/选项卡中的同一JSF视图进行交互,Bean就会存在。它是根据HTTP请求创建的,一旦用户回传到另一个视图,它就会被销毁。
描述来源:https://www.tutorialspoint.com/jsf/jsf_managed_beans.htm