You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:45:29