gpt4 book ai didi

jsf - 在 JSF 页面中评估 bean 的 EL 表达式

转载 作者:行者123 更新时间:2023-12-04 14:12:51 25 4
gpt4 key购买 nike

有没有办法在JSF页面中执行从bean接收到的EL表达式?

bean 类方法

public class Bean {

public String getExpr() {
return "#{emtpy row.prop ? row.anotherProp : row.prop}";
}

}

JSF 页面:

<p:dataTable value="#{bean.items}" var="row">
<p:column>
<h:outputText value="#{bean.expr}" />
</p:column>
</p:dataTable>

最佳答案

要么使用 JSF Application#evaluateExpressionGet() 在 getter 中以编程方式评估当前上下文中的 EL 表达式。在这种特定情况下,这只是可疑的,因为您基本上是 Controller /模型中的紧耦合 View 逻辑。

public String getExpr() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().evaluateExpressionGet(context, "#{emtpy row.prop ? row.anotherProp : row.prop}", String.class);
}

或者使用JSTL <c:set> (没有 scope !)以便在 View 中创建 EL 表达式的别名,以防您真正关心的是 EL 表达式的长度。

<c:set var="expr" value="#{emtpy row.prop ? row.anotherProp : row.prop}" />

<p:dataTable value="#{bean.items}" var="row">
<p:column>
<h:outputText value="#{expr}" />
</p:column>
</p:dataTable>

不用说 JSTL 方式要干净得多。

另见:

关于jsf - 在 JSF 页面中评估 bean 的 EL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com