我是JSF和PrimeFaces的新手,在开发带有多个菜单的全页面布局时遇到了一些问题。
问题#1
我们有一个使用PrimeFaces 3.3的完整页面布局,左侧有嵌套的布局单元,如下所示:
<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">
<p:layout>
<p:layoutUnit id="inner_center" position="center">
<h:form id="formMainMenu">
<ui:include src="#{menuBean.pageToDisplay}.xhtml" />
</h:form>
</p:layoutUnit>
<p:layoutUnit id="inner_south" size="200" position="south">
<h:form id="formStartMenu">
<p:menu>
<p:submenu label="Start Menu">
<p:menuitem value="Start" actionListener="#{#menuBean.setPageToDisplay('template/menu/start')}" update=":inner_center" />
</p:submenu>
</p:menu>
</h:form>
</p:layoutUnit>
</p:layout>
</p:layoutUnit>
这是支持豆:
@ManagedBean(name = "menuBean")
@SessionScoped
public class menuBean implements Serializable {
private String pageToDisplay = "template/menu/main";
public String getPageToDisplay() {
return this.pageToDisplay;
}
public void setPageToDisplay(String pageToDisplay) {
this.pageToDisplay = pageToDisplay;
} }
当我点击菜单项时,整个LayoutUnit(inner_center)就会消失。我已经尝试了多种Forms和Panel控件以及Ajax的组合,但无法加载第二个页面和菜单。也许由于我对JSF的了解有限,我的方法是不正确的。我希望这是一件简单的事情,但我只是错过了它。
通过menuItem操作,我想在inner_center布局单元中加载另一个PrimeFaces菜单bean。。也许我不需要这样做,只需要通过Ajax调用菜单?
第2期有了这些嵌套的LayoutUnit,当页面加载时,父LayoutUnit标题"Services"将完全消失。
<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">
非常感谢对整体方法的任何帮助或建议!!
谢谢!
这个问题似乎很受欢迎,所以我觉得至少有必要分享我们提出的解决方案,以处理基于许多其他Stack Overflow问答的整体应用程序设计;A、 我自己的实验、JSF标准、BalusC以及无数其他为学习曲线做出贡献的人和博客。
背景-
我们的应用程序是一个企业级服务管理解决方案,附带UI和任意数量的许可模块。我们审查了OSGI和其他重型应用程序框架,但决定使用Enterprise Maven项目,该项目通过配置文件和数据库设置进行轻量级.jar管理。我们使用由mySQL支持的实体对象,只将对象传递回UI。
解决方案-
对于我们的初始版本,我们创建了一个基于以下布局的JSF模板网站:http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/
这个想法是让UI完全动态,如下所示:
-
JSF核心应用程序设计
- 数据驱动的JavaEE Enterprise Maven应用程序
- 主要通过Ajax进行单页处理
- Security PhaseListener(帮助解决全局Ajax问题)
- 错误处理Phaselistener(有助于解决全局Ajax问题)
-
安全
- 我们在Glassfish上使用基于领域的安全性。使用JSF 2.2,您可以轻松地对目录、控件、页面和方法进行注释,以实现细粒度的角色管理
-
导航
-
基于Realm中的用户角色,从XML配置动态构建。
-
动态导航和表单都是根据需要通过作用域bean进行管理的。这个链接包含了许多关于你将遇到的真实问题的好答案:http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html
-
-
模板内容和控制
-
内容是通过实体填充的对象传递的。大部分数据来自数据库。只有基本应用程序初始化是通过本地配置文件完成的。
-
控件的生成是通过xml属性文件为需要通过UI管理的任何对象数据完成的。
-
如你所知,兔子洞有许多隧道。如果我们的应用程序设计中有任何部分与您的类似,并且您想要更多信息和/或代码示例,请随时询问,我会在这个帖子上发布,供其他人继续学习。