2012-07-12 69 views
8

我对JSF和PrimeFaces相当新,并且在开发具有多个菜单的完整页面布局时遇到了一些问题。嵌套的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_c输入)消失。我已经尝试了Ajax的Forms和Panel控件的许多组合,并且无法加载第二页和菜单。由于我在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"> 

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

谢谢!

+0

一些环境信息:Mojara 2.1,Primefaces 3.3,NetBeans IDE 7.0.1 + Glassfish – 2012-07-12 04:28:27

+0

我不能肯定地说,但是如果插入的页面具有表单组件,则可能会发生此问题。嵌套表单会导致问题。 – 2012-07-12 12:52:20

+0

谢谢。你是正确的..建议将表单放在layoutUnit控件中,我已经完成了...还确保在加载的页面中没有表单标签。我将再次尝试使用''和PanelGroup。也许参考是关闭的。 IDEALLY,我想跳过加载一个页面,并直接在layoutUnit中放置一个菜单,并通过传递一个值来动态填充它。 '' ..不确定最好的办法。 – 2012-07-12 16:08:39

回答

2

这个问题似乎是受欢迎的,所以我觉得有必要至少分享,我们已经提出了基于许多其他堆栈溢出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企业Maven的应用
    • 主要通过Ajax的单页处理
    • 安全的PhaseListener
    • 错误处理的PhaseListener(与全球阿贾克斯问题帮助)
  2. (与全球阿贾克斯问题帮助)安全

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

  4. 模板内容和控制

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

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

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