Richfaces HtmlColumn样式类覆盖

时间:2012-02-13 18:03:11

标签: java jsf richfaces el

在JSF中,您可以使用EL表达式将styleClass设置如下:

<rich:column>
 <h:outputText value="12" id="sumOfAllValues" styleClass="#{!t330RowItems.showSpecialField ? 'rich-table-green' : 'rich-table-cell'}"/>
</rich:column>

现在我使用org.richfaces.component.html.HtmlColumn在Java代码中构建表,唯一的问题是何时执行此操作:

htmlColumn.setStyleClass("#{!t330RowItems.showSpecialField ? 'rich-table-green' : 'rich-table-cell'}");

生成以下HTML:

<tbody id="j_id154:tb">
 <tr class="rich-table-row rich-table-firstrow ">
  <td class="rich-table-cell #{!t330RowItems.showSpecialField ? 'rich-table-green' : 'rich-table-cell'}" id="j_id154:0:j_id155">55</td>
 </tr>

问题是它没有评估EL表达式。关于我如何获得它的任何想法都有rich-table-cellrich-table-green作为styleClass?

1 个答案:

答案 0 :(得分:0)

您需要将其设置为值得信赖的ValueExpression,而不是普通的String。您可以按ExpressionFactory#createValueExpression()创建一个。您可以通过Application#getExpressionFactory()在JSF上下文中获取表达式工厂。

所以,这应该做:

ValueExpression styleClassVE = context.getApplication().getExpressionFactory()
    .createValueExpression(context.getELContext(), "#{!t330RowItems.showSpecialField ? 'rich-table-green' : 'rich-table-cell'}", String.class);

htmlColumn.setStyleClass(styleClassVE);
// or htmlColumn.setValueExpression("styleClass", styleClassVE);