我得到了一个简单的设置(也是一个大问题):一个带有空面板网格项容器的 JSP 页面和一个到 bean 的绑定。
<h:panelGrid binding="#{ bean.container }" id="container" />
当 bean 的 getter 将被调用时,容器中会填充随机数量的列,其中包含一个命令链接。到现在为止还挺好。容器中填充了正确数量的元素,并且通过在链接上使用 ActionListener,我得到了所有点击事件。
棘手的部分来了:我想通过不同的样式类标记“选定”或“按下”列。使用静态设置,我会使用如下表达式来执行此操作:
<h:column styleClass="#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }">
<!-- command link and some blahblah -->
</h:column>
bean 包含一个简单的 getter getSelectedColumn()
,它返回一个 id。直截了当,所以这很完美!
但是当我尝试在 bean 内部做同样的事情时,
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 内部生成的。是这个原因吗?
谁能告诉我为什么?提前致谢!