嵌套的primefaces布局中的动态页面更新

Rya*_* M. 8 jsf menuitem primefaces jsf-2

我是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>
Run Code Online (Sandbox Code Playgroud)

这是支持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; 
} }
Run Code Online (Sandbox Code Playgroud)

当我单击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">
Run Code Online (Sandbox Code Playgroud)

任何有关整体方法的帮助或建议都非常感谢!!

谢谢!

Rya*_* M. 2

这个问题似乎很受欢迎,所以我觉得至少有必要分享我们基于许多其他 Stack Overflow 问答、我自己的实验、JSF 标准、BalusC以及无数其他人和博客而提出的处理整体应用程序设计的解决方案这有助于学习曲线。

背景 -

我们的应用程序是一个企业级服务管理解决方案,附带 UI 和任意数量的许可模块。我们审查了 OSGI 和其他重型应用程序框架,但决定使用 Enterprise Maven 项目,通过配置文件和数据库设置进行轻量级 .jar 管理。我们使用 mySQL 支持的实体对象,仅将对象传递回 UI。

解决方案 -

对于我们的初始版本,我们基于此布局创建了一个 JSF 模板网站: http://www.mkyong.com/jsf2/jsf-2-templatating-with-facelets-example/

我们的想法是让 UI 完全动态化,如下所示:

  1. JSF 核心应用程序设计

    • 数据驱动的 JavaEE Enterprise Maven 应用程序
    • 主要通过 Ajax 进行单页处理
    • Security PhaseListener(帮助解决全局 Ajax 问题)
    • 错误处理 Phaselistener(帮助解决全局 Ajax 问题)
  2. 安全

    • 我们在 Glassfish 上使用基于领域的安全性。使用 JSF 2.2,您可以轻松地注释目录、控件、页面和方法,以实现精细的角色管理。
  3. 导航

  4. 模板内容和控件

    • 内容通过由实体填充的对象来传递。所有数据的大部分来自数据库。仅基本应用程序初始化是通过本地配置文件完成的。

    • 对于需要通过 UI 管理的任何对象数据,控件生成是通过 xml 属性文件完成的。

如你所知,兔子洞有很多隧道。如果我们的应用程序设计的任何部分与您的相似,并且您需要更多信息和/或代码示例,请随时询问,我将在此帖子上发布以供其他人继续学习。