Primefaces p:cache

Primefaces p:cache

我在使用 Primefaces p:cache 组件时遇到一些问题

这是如何在 testpage/index.xhtml

上使用的示例
<h:form>
<p:panel header="Testsite">
    <p:cache region="testsite2"
        key="testsite2#{user.id}#{user.defaultLanguage}">
        <p:commandButton action="#{testBean.hello}" value="btn" 
             rendered="#{testBean.renderedButton}">                 
        </p:commandButton>
    </p:cache>
</p:panel>
</h:form>

这是后端 bean

@ManagedBean(name = "testBean")
@ViewScoped
public class TestBean {
    @PostConstruct
    public void init() {
        System.out.println("init");
    }
    public void hello() {
        System.out.println("hello");
    }  
    public boolean isRenderedButton() {
        System.out.println("isRenderedButton");
        return true;
    }
}

所以在第一页上命中 initisRenderedButton 消息按预期正常打印。之后,当我单击按钮时,我希望看到打印出 hello 消息,但这里不是这种情况。谁能指出我正确的方向?

根据 Primefaces showcase for p:cache 按钮,我期待这种行为。

目前我正在使用Primefaces.DEFAULT_CHACHE_PROVIDER,稍后我将切换到ehcache。

我正在使用 PF 5.3,太阳脸 2.2.12。

谢谢。

为了回答我自己(也许会帮助别人),我试图从数据库创建动态菜单,我想用 p:cache 组件缓存生成的内容。但是那时每个菜单项都会调用 bean 方法,该方法会将用户重定向到页面,这首先是问题。 所以我有这样的事情:

<p:menu>
  <p:submenu label="Human resource">
     <p:menuitem value="Search person" actionListener="#{bean.navigateUserToSearchPerson}"/>
  </p:submenu>

其实我并没有解决这个问题(没有额外的时间来调查问题),所以我想到了为每个菜单项生成链接的想法,这样当用户点击菜单项时,它会把他重定向到新的页。所以现在我在菜单中没有任何 AJAX 调用,缓存现在工作正常。 代码示例:

<p:cache region="appUiCache" key="panelMenu#{user.id}#{user.defaultLanguage}">
  <p:panelMenu id="sm" model="#{bean.menuModel}" stateful="true" />
</p:cache>

菜单项是从数据库动态创建的:

DefaultMenuItem defaultMenuItem = new DefaultMenuItem(...);
defaultMenuItem.setIcon(item.getIcon());
defaultMenuItem.setUrl(item.getUrl()); <!-- This is new url part -->

这在生产中运行良好。谢谢