Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未更新JSF页面内容_Jsf_Caching - Fatal编程技术网

未更新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

我有一个JSF应用程序,我正在使用
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来避免这个缓存问题,但这需要对应用程序进行一些严重的更改,所以这不是一个选项

任何关于为什么会发生这种情况的帮助或指导都将不胜感激