我是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>
这是支持bean:
@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;
} }
当我点击menuItem时,整个LayoutUnit(inner_center)消失了。我已尝试过多种窗体和面板控件组合以及Ajax,无法加载第二页和菜单。由于我对JSF的了解有限,也许我的方法不正确。我希望这个简单,我只是想念它。
从menuItem动作,我想在inner_center布局单元中加载另一个PrimeFaces菜单bean。也许我不需要这样做,只需通过Ajax调用菜单?
问题#2 使用这些嵌套的layoutunits,当页面加载时,父LayoutUnit标题“Services”完全消失。
<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">
非常感谢任何有关整体方法的帮助或建议!
谢谢!
答案 0 :(得分:2)
这个问题似乎很受欢迎,所以我觉得至少要分享我们提出的解决方案,以便根据众多其他Stack Overflow Q&amp; A,我自己的实验,JSF标准来处理整体应用程序设计,{{3和无数其他人和博客对学习曲线做出了贡献。
背景 -
我们的应用程序是一个企业级服务管理解决方案,附带UI和任意数量的许可模块。我们回顾了OSGI和其他繁重的应用程序框架,但决定使用配置文件和数据库设置进行轻量级.jar管理的Enterprise Maven项目。我们使用mySQL支持的实体对象,只将对象传递回UI。
解决方案 -
对于我们的初始版本,我们基于此布局创建了一个JSF模板网站: BalusC
我们的想法是让UI完全动态如下:
JSF核心应用程序设计
安全
导航
根据Realm中的用户角色从XML配置动态构建。
动态导航和表单都根据需要通过范围bean进行管理。此链接包含许多您将遇到的真实问题的良好答案:http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/
模板内容和控件
内容通过实体填充的对象传递。大多数数据来自数据库。只有基本应用程序初始化通过本地配置文件完成。
通过xml属性文件完成控件生成,以获取需要通过UI管理的任何对象数据。
如你所知,兔子洞有很多隧道。如果我们的应用程序设计的任何部分与您的相似,并且您需要更多信息和/或代码示例,请随时提出,我将在此主题上发布以供其他人继续学习。