2012-07-12 71 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管理的對象數據生成控件。

如你所知,兔子洞有很多隧道。如果我們的應用程序設計的任何部分與您的應用程序設計類似,並且您需要更多信息和/或代碼示例,請隨時詢問,我將在此主題上發佈,供其他人繼續學習。