2011-09-30 41 views
0

我發現了一些由BalusC(urs的粉絲)和其他人在堆棧溢出發表的一些帖子,並沒有找到解決方案,這似乎是許多人想要做的事情。如何:部分憤怒與jsp2/facelets /模板與菜單驅動主要內容刷新只有刷新?

如果我有一個小面/模板結構就是這樣,一個左側導航 與開什麼在主要內容的區域中顯示被鏈接,但沒有做 一個完整的頁面刷新,我只是想主要區域更新,如何我要這樣做嗎?

 
------------------------------------- 
| link1 | show content for link1 | 
| link2 | when link1 is clicked | 
| link2 | in left navigation area | 
|  |       | 
------------------------------------- 

我看到primefaces展示左點擊菜單項時做了整頁刷新,而奇怪的是,在richfaces4展示不對,雖然我在看的代碼無法理解,只是還沒有。有沒有一個例子可以告訴我如何做到這一點?

這裏是我的代碼

uiTemplate.xhtml(主模板)

<div> 
     <div id="left"> 
      <ui:include src="navigationMenu.xhtml"/> 
     </div> 

     <div id="center_content" class="center_content"> 
      <ui:insert name="center_content" /> 
     </div> 
</div> 

然後我navigationMenu.xhtml看起來像

<ui:composition> 
     <rich:collapsiblePanel header="ClickMe" switchType="client">     
      <h:link outcome="page1" value="goto page1" /><br /> 
      <h:link outcome="page2" value="goto page2" /><br /> 
      <h:link outcome="page3" value="goto page3" /><br /> 
     </rich:collapsiblePanel> 
</ui:composition> 

,並且將出現在中心的一個頁面內容區域,希望加載 而不需要對所有部分進行完整刷新。

我想我需要一些 f:ajax標籤或使用h:commandLink作爲上面的這些鏈接,但是還沒有找到一個好的 的例子。我看到一堆關於Mojarra 2.1.x修復動態包括的帖子,但是不知道是否與此相關,除非這是完成此操作的唯一方法。

page1.xhtml

<ui:composition template="./uiTemplate.xhtml"> 
     <ui:define name="center_content"> 
      page 1 content 
     </ui:define> 
</ui:composition> 

回答

0

我想出如何得到的東西的工作,但是,我沒有做太多的測試,比如增加 多個組件集成到比其他A4J導航形式:commandLink元素。我目前的導航部分僅僅更新中心內容在一個AJX請求新的內容,從而沒有做一個完整的頁面刷新,沒有什麼複雜的,這裏是我的navigationMenu.xhtml文件

<ui:composition> 
    <h:form>    
     <rich:collapsiblePanel header="Carriers" switchType="client">     
      <a4j:commandLink action="page1" value="goto page1.xhtml" render=":centerContentDiv"/><br /> 
      <a4j:commandLink action="page2" value="goto page2.xhtml" render=":centerContentDiv"/><br /> 
     </rich:collapsiblePanel> 
    </h:form> 

,然後我uiTemplate。 XHTML這是我的主模板 有這樣

<div> 
     <div id="left"> 
      <ui:include src="navigationMenu.xhtml"/> 
     </div> 

      <h:panelGroup id="centerContentDiv" layout="block"> 
       <ui:insert name="center_content" /> 
      </h:panelGroup> 

    </div> 

我注意到它的一個片段似乎是一個有點古怪,甚至在我非常小的測試應用程序。 我點擊鏈接時,是真實的故意或它似乎忽略我

我想我需要從primefaces添加facestraces看到 如果它告訴我,發生了什麼

我希望這可以幫助別人什麼在那裏

***隨訪*****

作爲後續,經過一番測試,如果包括中心內容隨後 包含物(S),提交的形式(S)似乎只發生第二次點擊commandLink或c ommandButton。表單不嵌套,這是表單無法正確提交的常見原因BalusC comments here。我添加了facestraces,它確實擊中了服務器,但從恢復視圖跳轉到呈現響應,第二次點擊它經歷了所有階段。

,導航uiComposition具有h將事實:形式和中心內容uiComposition有H:形式造成的問題。我知道這一點,因爲如果我刪除導航uiComposition,並直接通過在URL中輸入加載中心內容,那麼它的形式提交正確的第一次點擊。我認爲BalusC在post on partial page rendering中提到這件事,但在那篇文章中沒有一個完整的例子,對我來說有點難。這將是一個常見的任務,我會假設許多人想實施,所以我會繼續挖掘。

+0

看到這篇文章的結尾http://stackoverflow.com/questions/7746221/how-to-do-partial-page-rendering-center-content-with-jsf2-templating-via-ajax/最後得到它的工作。 – user825402