2011-02-02 35 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