未更新JSF页面内容
我有一个JSF应用程序,我正在使用未更新JSF页面内容,jsf,caching,Jsf,Caching,我有一个JSF应用程序,我正在使用ui:composition/ui:include在页面中显示一些元素,如下代码所示 template.xhtml ... <h:body> ... <h:panelGroup id="mainPanel"> <ui:include src="#{myBean.page}"/> </h:panelGroup> ... </h:body> 。。。 ... ... items-l
ui:composition
/ui:include
在页面中显示一些元素,如下代码所示
template.xhtml
...
<h:body>
...
<h:panelGroup id="mainPanel">
<ui:include src="#{myBean.page}"/>
</h:panelGroup>
...
</h:body>
。。。
...
...
items-list.xhtml
<ui:composition>
...
<h:form>
<p:dataTable var="item" value="#{myBean.items}">
<p:column>
<h:commandLink action="#{myBean.loadItemDetail(item)}"
process="@this"
update="mainPanel">
<h:outputText value="#{item.name}"/>
</h:commandLink>
</p:column>
</p:dataTable>
</h:form>
...
</ui:composition>
...
...
items-detail.xhtml
<ui:composition>
<h:form>
<!-- Some code to display and modify the item details-->
</h:form>
<ui:composition>
MyBean.java
@ManagedBean
@ViewScoped
public class MyBean {
private String page;
private List<Item> items;
private ItemDetail itmDetail;
@PostConstruct
private void init() {
page = "items-list.xhtml"
items = ... //some logic to populate the items list
}
public void loadItemDetail(Item item){
itmDetail = ... //some logic to get the item's detail
page = "item-detail.xhtml"
}
}
@ManagedBean
@视域
公共类MyBean{
私有字符串页;
私人清单项目;
私人项目详细信息;
@施工后
私有void init(){
page=“items list.xhtml”
items=…//填充items列表的一些逻辑
}
公共无效loadItemDetail(项目){
itmDetail=…//获取项目详细信息的一些逻辑
page=“item detail.xhtml”
}
}
第一次单击某个项目以查看详细信息时,它可以正常工作,但此后,如果单击浏览器的“后退”按钮并尝试加载其他项目详细信息,它会不断显示第一个项目的详细信息
我检查每个调用的JSF生命周期,尽管在每个调用中应用程序都会经历所有的satage,但只有第一个调用bean方法locadItemDetail
。第一次成功调用后,我的方法被忽略有什么原因吗?JSF上是否存在某种缓存,在那里我的数据是从bean而不是我的bean获取的
此外,我还试图避免这种行为,如本文所建议的那样,实现一个过滤器,它可以正常工作,但现在当我单击浏览器的“后退”按钮时,它会显示一个恼人的页面,阻止我重新发送表单;有没有办法防止这种情况发生
注意:
我知道我可以将应用程序更改为使用GET方法而不是POST来避免这个缓存问题,但这需要对应用程序进行一些严重的更改,所以这不是一个选项
任何关于为什么会发生这种情况的帮助或指导都将不胜感激