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



我是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完全动态,如下所示:

  1. JSF核心应用程序设计

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

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

    • 基于Realm中的用户角色,从XML配置动态构建。

    • 动态导航和表单都是根据需要通过作用域bean进行管理的。这个链接包含了许多关于你将遇到的真实问题的好答案:http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html

  4. 模板内容和控制

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

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

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

最新更新