2012-02-13 68 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> 

現在我建立使用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?

回答

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

大這解決了這個問題,其中htmlColumn.setValueExpression( 「的styleClass」,styleClassVE)的一部分;現在生成的唯一一條是: 56。如果它不是一個特殊的行,所以有一個重複的富表格單元格 – plouw 2012-02-13 18:24:23

+0

也許你需要在條件中用''''來替換'富表格單元格'?我不知道什麼樣的HTML RichFaces會在任何情況下產生,以及你的確切功能要求是什麼,所以我只是瘋狂地猜測。讓'.rich-table-green'的CSS類定義覆蓋'.rich-table-cell'設置的任何樣式應該足夠了。 – BalusC 2012-02-13 18:29:13

+0

正如旁註,如果行是一個特殊的行,它會生成以下內容: 56。有豐富的表格和豐富的表格綠色。但是,如果找到更合理的解決方法,只需使用ValueExpression的想法來覆蓋樣式,只需覆蓋我需要的屬性。謝謝!! – plouw 2012-02-13 18:42:56