2012-02-13 4 views
1

В JSF вы можете использовать выражение EL установить styleClass следующим образом:RichFaces HtmlColumn класс стиля перезаписать

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

Теперь я строю таблицу в Java коде, используя org.richfaces.component.html.HtmlColumn только проблема в том, когда это сделать:

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> 

Th Проблема заключается в том, что он не оценивает выражение EL. Любые идеи о том, как я могу получить его, либо имеют rich-table-cell, либо rich-table-green как styleClass?

ответ

0

Вам необходимо установить его как полноценный ValueExpression, а не простой ваниль String. Вы можете создать его на ExpressionFactory#createValueExpression(). Вы можете получить фабрику выражений в контексте JSF на Application#getExpressionFactory().

Таким образом, это должно сделать:

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); 
+0

Великий это решить часть проблемы, где htmlColumn.setValueExpression ("styleClass", styleClassVE); Единственное, что теперь генерируется: 56. Если это не специальная строка, значит, существует дубликат rich-table-cell – plouw

+0

Возможно, вам нужно заменить ''rich-table-cell'' условием на' '' '? Я понятия не имею, какой HTML RichFaces будет сгенерирован при любых обстоятельствах и в чем заключается ваше точное функциональное требование, поэтому я просто дико угадываю. Этого должно быть достаточно, чтобы определение класса CSS «.rich-table-green» переопределяло любые стили, заданные '.rich-table-cell'. – BalusC

+0

Так же, как сторона примечания, если строка представляет собой специальную строку, она генерирует следующее: 56. Имея богатую таблицу-ячейку и богатый стол-зеленый. Но если найти более логичный обходной путь, просто использовал идею ValueExpression, чтобы перезаписать стиль, перезаписав только те свойства, которые мне нужны. БЛАГОДАРЯ!! – plouw