8

我对 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 调用菜单?

ISSUE #2 使用这些嵌套的布局单元,当页面加载时,父布局单元标题“服务”完全消失。

<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">

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

谢谢!

4

1 回答 1

2

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

背景 -

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

解决方案 -

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

这个想法是让 UI 完全动态,如下所示:

  1. JSF 核心应用程序设计

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

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

  4. 模板内容和控件

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

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

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

于 2012-11-26T18:52:54.437 回答