MyFaces datatable columnClasses奇怪的行为

时间:2014-02-04 15:03:24

标签: jsf-2 myfaces

我最近从TomEE 1.5.2改为1.6.0,将MyFaces从2.1.10升级到2.1.13。 我现在在dataTable列样式中看到了不寻常的结果。

这很好用:

<h:dataTable value="#{testView.dataList}" var="r" columnClasses="col1,col2,col3,col4">
    <h:column><f:facet name="header">Col 1</f:facet>#{r.col1}</h:column>
    <h:column><f:facet name="header">Col 2</f:facet>#{r.col2}</h:column>
    <h:column><f:facet name="header">Col 3</f:facet>#{r.col3}</h:column>
    <h:column><f:facet name="header">Col 4</f:facet>#{r.col4}</h:column>
</h:dataTable>

但是,如果列的渲染属性值为evon,那么列类就会搞乱。

<h:dataTable value="#{testView.dataList}" var="r" columnClasses="col1,col2,col3,col4">
    <h:column><f:facet name="header">Col 1</f:facet>#{r.col1}</h:column>
    <h:column><f:facet name="header">Col 2</f:facet>#{r.col2}</h:column>
    <h:column rendered="false"><f:facet name="header">Col 3</f:facet>#{r.col3}</h:column>
    <h:column><f:facet name="header">Col 4</f:facet>#{r.col4}</h:column>
</h:dataTable>

给出

<tr>
    <td class="col1">col1</td>
    <td class="col2">col2</td>
    <td class="col3">col4</td>
</tr>

第3列未按预期呈现,但第4列已获得col3样式而非col4样式。 正如我所说的那样,它工作正如我在2.1.13之前所期望的那样,你认为这是一个MyFaces的错误吗?

1 个答案:

答案 0 :(得分:1)

这不是错误,而是按规范,columnClasses按顺序应用于活动列。这是MYFACES-3749中的一个修复,但我使用最新版本的Mojarra进行了检查,它的工作原理相同。

我的建议是使用tomahawk扩展数据表,它就像h:datatable一样,但有一些扩展功能。在您的情况下,您可以这种方式设置列的styleClass。

<t:datatable var="row" ...>
   <t:column styleClass="#{row.styleClass}">
   ...
   </t:column>
</t:datatable>

此问题已在规范中报告过。请参阅JAVASERVERFACES_SPEC_PUBLIC-217