在JSF Primefaces中使用动态菜单更改内容部件

在JSF Primefaces中使用动态菜单更改内容部件,primefaces,jsf-2.2,Primefaces,Jsf 2.2,我使用的是一个JSF模板,它分为4部分——页眉、菜单栏、内容和页脚。标题包含应用程序名称、版本、用户名、上次登录等。从数据库检索的详细信息。菜单部分包含从DB w.r.t.填充的动态菜单。用户角色和访问权限。基于菜单项,我只需要刷新内容部分,而不需要重新加载/刷新页眉、菜单栏和页脚。因此,如果菜单包含指向SomePage.xhtml的URL,则单击菜单项时,SomePage.xhtml应加载到内容中。我在网上查了很多链接和解决方案,但都没能成功。有人能请我在这里吗 下面代码中的所有支持bean引

我使用的是一个JSF模板,它分为4部分——页眉、菜单栏、内容和页脚。标题包含应用程序名称、版本、用户名、上次登录等。从数据库检索的详细信息。菜单部分包含从DB w.r.t.填充的动态菜单。用户角色和访问权限。基于菜单项,我只需要刷新内容部分,而不需要重新加载/刷新页眉、菜单栏和页脚。因此,如果菜单包含指向SomePage.xhtml的URL,则单击菜单项时,SomePage.xhtml应加载到内容中。我在网上查了很多链接和解决方案,但都没能成功。有人能请我在这里吗

下面代码中的所有支持bean引用都是从数据库中检索数据

BaseTemplate.xhtml


header.xhtml



菜单.xhtml


footer.xhtml


SomePage.xhtml


单击其中一个菜单项时,将在“内容”部分填充此内容。

这里有两个技巧:

1) 检查您的菜单模型bean范围:

  • 如果您的菜单与用户相关,那么我想应该是@SessionScoped
  • 您还可以每次动态创建菜单(在getMenuModel()中而不是在bean构造函数中)。效率较低,但至少能工作
2) 如果要刷新菜单,必须为菜单栏组件设置id属性

<p:menubar id="menuBar1" model="#{menuBean.model}" />

也许我错了,但是JSF模板只是一个处理公共元素(菜单、页眉、页脚、对话框等)的系统,没有重复它们的实现(不要重复自己!)。您的想法是面向SPA(单页应用程序),JSF不能支持它(至少在本机上是这样)。您必须使用面板或div实现自己的“布局”系统,并使用ajax操作填充这些系统。这只是使用带facelet的JSF模板的页面装饰,而不是SPA。这里没什么不好的:)-完全没有。@miguel:这不是真的。jsf支持部分更新页面。我认为OP的主要问题是如何只更新主“面板”。
item.setUpdate("menuBar1");