2010-01-28 27 views
2

我的問題是,RichFaces reRender不工作'元素樹中的當前元素'下;只有上層元素纔會被重新渲染。使用RichFaces的絕對reRendering

有沒有辦法通過AJAX訪問較低的元素?

任何幫助,將不勝感激! Daniel

編輯我把這個問題編輯爲更一般的問題。如果對原始問題感興趣,請參閱修訂版。

回答

3

這裏是changePanel111()改變下層元素的內容的一個例子:

<h:form id="form" prependId="true"> 
    <rich:panel id="PANEL1"> 
     <h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/> 
     <rich:panel id="PANEL11"> 
      <h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/> 
      <rich:panel id="PANEL111"> 
       <h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/> 
      </rich:panel> 
     </rich:panel> 
     <rich:panel id="PANEL12"> 
      <h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/> 
      <br/> 
      <a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}"> 
       <a4j:support reRender="PANEL12" event="onclick"/> 
      </a4j:commandLink> 
      <br/> 
      <a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}"> 
       <a4j:support reRender="form:PANEL111" event="onclick"/> 
      </a4j:commandLink> 
     </rich:panel> 
    </rich:panel> 
</h:form> 

通知下部單元需要如何認定爲form:PANEL111

希望這會有所幫助!

8
  • reRender作品與提供要重新描繪目標對象的的id(相同的命名容器內 - form最常)
  • id應該是唯一的字符串,根據HTML規範
  • reRender允許動態值 - 即reRender="#{myBean.currentItemsToRerender}

此基礎上,我認爲你應該能夠實現你想要的(雖然它不是全部LY清楚)

更新:

UIComponent.findComponent(..)對解決IDS一個明確的算法。因此,爲了絕對參考您的reRendered ID應該開始:然後繼續通過命名容器的層次結構。

+0

感謝您的迴應!我編輯了我的帖子... –

+0

+1爲您的更新 – nahab

0

reRender也可以指向表單外的任何組件。例如這個工程:

<h:form> 
    <a4j:commandButton reRender="panel"/> 
</h:form> 

<h:panelGrid id="panel"> 
... 
</h:panelGrid> 
0

對於我的MyFaces + Richfaces應用程序,<rich:panel>標記不按所選答案中的描述工作。當我將其更改爲<a4j:outputPanel ajaxRendered="true" />時,它開始工作,如下所示:「<a4j:commandLink> Not Rerendering

配置:MyFaces 2.1.10(用於模板的Facelets)和Richfaces 4.2.3。

希望這會有所幫助。