2011-02-02 36 views
4

我已經得到了有條件地顯示基於項目的布爾屬性的每個項目一個JSF數據表,具體如下:JSF H:列標籤不評價呈現屬性

<h:dataTable value='#{sessionBean.items}' var='item'> 
    <h:column rendered='#{item.visible}'> 
     <h:outputText value='#{item.description}'/> 
    </h:column> 
</h:dataTable> 

我的問題是,rendered屬性似乎並不是指我的產品中的visible屬性。我已經在屬性的getter中放置了一條跟蹤消息,並且可以確認getter沒有被調用。什麼真正讓我爲難,不過,是以下工作:

<h:dataTable value='#{sessionBean.items}' var='item'> 
    <h:column rendered='true'> 
     <h:outputText value='visible = #{item.visible}'/> 
     <h:outputText value='#{item.description}'/> 
    </h:column> 
</h:dataTable> 

也就是說,在這種情況下,所有項目都呈現和文本「可見= true」或「可見=假」是成功的輸出每。這是只有rendered屬性,該getter不起作用。

有沒有人有任何想法可能會導致這種行爲,我應該怎麼做來糾正它?

回答

4

表列(讀:<td>元件,其相同柱上,從而適用於所有所有)不能在每行的基礎呈現。這不是真正的JSF限制,而是更多的HTML限制。問問你自己,HTML應該怎麼樣?瀏覽器應該如何處理所有按行排列的<td>元素?沒錯,它沒有任何意義可言:)


只需推動基於行的渲染單元格的內容:

<h:column> 
    <h:outputText value="#{item.description}" rendered="#{item.visible}"/> 
</h:column> 

或使其基於豆類的渲染,如果你實際上希望完全隱藏整列:

<h:column rendered="#{sessionBean.visible}"> 
    <h:outputText value="#{item.description}"/> 
</h:column> 
+0

我實際上使用的是我大約一年前正在使用的舊代碼庫。奇怪的是,當時似乎還行得通...但是我會看看我能否得到你需要的東西。乾杯! – Mac 2011-02-02 04:12:49