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

时间:2012-07-12 01:43:22

标签: jsf jsf-2 primefaces menuitem

我是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">

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

谢谢!

1 个答案:

答案 0 :(得分:2)

这个问题似乎很受欢迎,所以我觉得至少要分享我们提出的解决方案,以便根据众多其他Stack Overflow Q&amp; A,我自己的实验,JSF标准来处理整体应用程序设计,{{3和无数其他人和博客对学习曲线做出了贡献。

背景 -

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

解决方案 -

对于我们的初始版本,我们基于此布局创建了一个JSF模板网站: BalusC

我们的想法是让UI完全动态如下:

  1. JSF核心应用程序设计

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

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

  4. 模板内容和控件

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

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

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