1

我得到了一个简单的设置(也是一个大问题):一个带有空面板网格项容器的 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 内部生成的。是这个原因吗?

谁能告诉我为什么?提前致谢!

4

1 回答 1

1

当 JSP 被编译时,bean 不会被调用!这是在运行时完成的,因为您想查看 bean 中的实时数据。因此(后来)生成的 EL 在编译时是不可见的。EL 不会在运行时解析。

于 2011-05-09T21:42:58.307 回答