应用程序运行方式
JSF
Primefaces
,
eclipselink
我很难理解
@ViewScoped
页面工作,我得到一个
select
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
,更改第三个人(删除
car
,保存在数据库中(签入数据库)
-
peoplePage.xhtml文件
,列表正常,
身份证
在调试中
#650, #651, #652
-
更改值(从
null
)的
选择界面
p
似乎是
#412
listPpl
(因为只包含有效的元素并对应于DB),所以它是一种缓存
我试着让自己失去能力
埃普利塞林
缓存为状态
EclipleLink cache
-
改变
财产
-
改变
日本航空公司
房地产
-
使用
@Cacheable(false)
没有人起作用,也没有人进入私人导航,也没有人清除浏览器缓存并返回到页面
第页
元素仍然是第一次加载时的旧元素
@视域
允许每次打开一个页面,就好像这是第一次一样,但似乎不知道元素可以存储/缓存在哪里
我暂时用了一个变通办法,但这显然是最好的解决办法
public People setSelectedPeople(People p){
if(p!=null)
selectedPeople = sPeople.read(p.getId());
}