2010-10-14 36 views
1

我得到了一個簡單的設置(和一個大問題):一個JSP頁面,包含en空面板網格項容器和一個綁定到一個bean。爲什麼動態創建的JSF EL值表達式未解析?

<h:panelGrid binding="#{ bean.container }" id="container" /> 

當bean的getter被調用時,容器被填充了一個隨機數的列,裏面有一個命令鏈接。到現在爲止還挺好。容器中充滿了適當數量的元素,並且通過在鏈接上使用ActionListener,我可以獲得所有的點擊事件。

這裏有棘手的部分:我想通過不同的風格類標記'selected'或'pressed'列。隨着靜態設置,我會像一個表達式做到這一點:

<h:column styleClass="#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }"> 
    <!-- command link and some blahblah --> 
</h:column> 

Bean包含一個簡單的getter getSelectedColumn(),返回的ID。直向前,所以這個作品完美!

但是當我嘗試做同樣的內,

ELContext elContext = FacesContext.getCurrentInstance().getELContext(); 
String expression = "#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }"; 
new ExpressionFactoryImpl().createValueExpression(elContext, expression, String.class); 
column.setValueExpression("styleClass", valueExpression); 

表達永遠不會得到解決。爲了使自己清楚:這兩列的命令鏈接值表達式都生成了裏面的bean。這是原因嗎?

有誰能告訴我爲什麼?提前致謝!

回答

0

當JSP被編譯時,bean不會被調用!這是在運行時完成的,因爲你想看到bean中的實時數據。因此(編譯後)生成的EL在編譯時不可見。 EL在運行時不會被解析。

+0

好的,這是有道理的。我會嘗試別的。謝謝。 – 2011-06-21 17:17:34