2013-12-09 59 views
0

我有一個JSF複合組件,它只根據傳遞給它的屬性cc.attrs.list呈現一些部分。 在其中一個組件中,我想根據屬性更新一組其他組件。因此,像這樣:如何對組件執行條件更新

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/> 

的問題是,resultTable不會呈現全部的時間和時resultTable是不存在的,我得到一個異常Cannot find component with expression "id_resultTable",這並不奇怪。所以我的想法是創建一個將包含屬性或空字符串這樣的ID的變量:

<c:if test="#{cc.attrs.list}"> 
    <ui:param name="updateTable" value="#{cc.attrs.id2}_resultTable"/> 
</c:if> 
<c:otherwise> 
    <ui:param name="updateTable" value=""/> 
</c:otherwise> 

,然後做這樣的AJAX更新:

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{updateTable}"/> 

的問題是,該#{updateTable}變量總是一個空字符串(我試圖把它作爲outputText的內容),我不知道爲什麼。

+0

謝謝,但條件很好。 ''''''參數被定義爲:''''''在其他情況下,作品(我用它來渲染/不渲染組件) – NeplatnyUdaj

回答

1

您可以直接省略ui:param和直接做檢查p:ajax

<p:ajax event="dialogReturn" listener="#{cc.listener}" 
update="#{cc.attrs.id2}_input #{cc.attrs.list ? cc.attrs.id2.concat('_resultTable') : ''}"/> 

c:if的問題-approach可能是,當你更新通過AJAX這部分條件不重新檢查JSTL標籤是在視圖構建時進行評估的。有關更多信息,請參閱JSTL in JSF2 Facelets... makes sense?

+0

這工程!謝謝。 – NeplatnyUdaj

0

這不是一個真正的解決方案,但我已經爲解決問題的方法做了一個解決方法。我在表格中添加了ID爲h:panelGroup的id,我正在更新此表而不是表格。