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;
}
}
所以在第一页上命中 init
和 isRenderedButton
消息按预期正常打印。之后,当我单击按钮时,我希望看到打印出 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 -->
这在生产中运行良好。谢谢
我在使用 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;
}
}
所以在第一页上命中 init
和 isRenderedButton
消息按预期正常打印。之后,当我单击按钮时,我希望看到打印出 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 -->
这在生产中运行良好。谢谢