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

标签 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 header “Services”会完全消失。
<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">

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

谢谢!

最佳答案

这个问题似乎很受欢迎,所以我觉得至少有必要分享一下我们根据许多其他 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 完全动态,如下所示:

  • JSF 核心应用程序设计
  • 数据驱动的 JavaEE 企业 Maven 应用程序
  • 主要通过 Ajax 进行单页处理
  • 安全 PhaseListener(帮助解决全局 Ajax 问题)
  • 错误处理 Phaselistener(帮助解决全局 Ajax 问题)
  • 安全
  • 我们在 Glassfish 上使用基于领域的安全性。使用 JSF 2.2,您可以轻松地对目录、控件、页面和方法进行注释,以实现精细的角色管理。
  • 导航
  • 基于 Realm 中的用户角色从 XML 配置动态构建。
  • 动态导航和表单都根据需要通过作用域 bean 进行管理。此链接包含许多您将遇到的真正问题的好答案:http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html
  • 模板内容和控件
  • 内容通过由实体填充的对象传递。大多数数据来自数据库。只有基本应用程序初始化是通过本地配置文件完成的。
  • 对于需要通过 UI 管理的任何对象数据,控件生成是通过 xml 属性文件完成的。

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

    关于jsf - 嵌套 primefaces 布局中的动态页面更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443980/

    相关文章:

    ajax - 从 jsf.ajax.addOnEvent() 中止 JSF Ajax 请求

    jquery - 更新后如何滚动到 JSF 组件的底部?

    redirect - JSF - 从 @PostConstruct 重定向后保留 Faces 消息

    javascript - p :commandButton onclick does not update/re-render on ajax request? 内的 EL 表达式

    css - 如何更改默认主页图标

    java - p :inputText in p:inplace when DB constraint validation failed 的重置值

    java - 使用 CDI 转换器进行 JSF selectOneMenu 实体转换失败

    使用消息包的 JSF 本地化和多元化

    jsf - <p :selectManyMenu var> throws ELException: The class 'java.lang.String' does not have the property 'foo'

    javascript - RichFaces 命令按钮的 onclick 方法