2010-09-20 196 views
4

編輯
廣東話成分似乎得到renderedupdate屬性正常工作。這裏是我的代碼JSF + Primefaces:問題與「渲染」使用Ajax

 <ui:define name="left"> 
      <h:form> 
       <p:commandLink value="Hey" 
       actionListener="#{bean.setRenderComment}" 
       update="comment"/> 
      </h:form> 
     </ui:define> 
     <ui:define name="right"> 
      <h:panelGroup id="comment" rendered="#{bean.renderComment}"> 
       hello 
      </h:panelGroup> 
     </ui:define> 

renderComment裏面bean一個布爾屬性。 setRenderComment基本上切換的renderComment狀態這樣

this.renderComment = !this.renderComment; 

右鍵,每次我點擊鏈接Hey上的時候,我需要刷新要麼渲染hello開啓或關閉。我怎樣才能解決這個問題,讓我不需要刷新

回答

13

我不使用Primefaces RichFaces的,但我的項目。所以我不清楚Primefaces如何完成刷新過程。但是,我有一個可以輕鬆測試的想法。

您的問題可能是由於該組件重新渲染(即更新)未在HTML頁面上找到。如果你的rendered屬性等於false,那麼<SPAN>comment id是而不是集成在HTML頁面中生成的。因此,當在客戶端接收到Ajax請求時,Ajax引擎無法刷新此<SPAN>,因爲找不到它。

所以你能做的就是永遠使你panelGroup並移動rendered屬性包含你好消息嵌套<h:outputText>

這裏是我的建議:

<h:panelGroup id="comment"> 
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/> 
</h:panelGroup> 

這樣,panelGroup中總是會在Ajax調用後刷新,並且它將包含你好消息與否,對於renderComment的價值你的bean的屬性。

+0

謝謝。有用 :)。我之所以使用'panelGroup'是因爲我有很多組件需要使用一個'rendered'屬性來打開或關閉'render'。如果我必須這樣做,我想,我可能只是把'panelGroup'拿出來。非常感謝:D – 2010-09-21 14:53:37

1

由於與ID comment組件不是形式的(一個UINamingContainer成分)的一個孩子,你需要:前綴標識指示JSF來從「上一級」掃描。

這應該這樣做:

<p:commandLink value="Hey" 
    actionListener="#{bean.setRenderComment}" 
    update=":comment" /> 
+0

哦,哇。我不知道'update'只能在同一級別上運行。如果我有多個級別會怎麼樣?我嘗試':: comment',但它不起作用。你能看看我更新的帖子嗎? – 2010-09-21 03:02:52

+0

@哈里:羅曼塔斯已經把它釘死了。 – BalusC 2010-09-21 14:04:46