如何为JSF组件的rendered属性程序化设置值表达式?
为JSF组件的rendered属性设置值表达式的方法
由于UIComponentBase类仅提供了setRendered(boolean)方法,没有直接的setRendered(ValueExpression)方法,你可以通过JSF组件通用的setValueExpression()方法来实现需求:
- 直接调用组件的
setValueExpression()方法,第一个参数传入属性名"rendered",第二个参数传入对应的ValueExpression对象即可,和设置value属性的方式完全一致。
修改后的代码示例:
HtmlCommandLink cmdLink = Faces.createComponent(HtmlCommandLink.COMPONENT_TYPE); cmdLink.setValueExpression("value", createValueExpression("#{commonDAO.getDataFile(" + valueExpr +").name}")); cmdLink.setActionExpression(createMethodExpression("#{dataFileBean.serveDownload(" + valueExpr +")}")); // 正确实现:用通用的setValueExpression方法绑定rendered属性的表达式 cmdLink.setValueExpression("rendered", createValueExpression("#{not empty " + valueExpr + "}")); fileLine.getChildren().add(cmdLink);
原理说明:
所有JSF组件都继承自UIComponent,该类定义的setValueExpression(String name, ValueExpression expression)方法支持为组件任意支持值表达式的属性绑定表达式,无需每个属性都单独提供对应的setXxx(ValueExpression)方法。
内容的提问来源于stack exchange,提问作者Igor Mukhin
相关产品推荐
相关产品推荐

