三元运算符在许多属性中起作用,如“rendered”、“value”和其他属性。
但它在action(动作)中不起作用?或者是我用错了吗?
<h:commandLink action="#{true ? bean.methodTrue() : bean.methodFalse()}"/>
错误:javax.el.ELException:不是有效的方法表达式
(我使用PrimeFaces Ajax action属性时意识到这一点)
三元运算符在许多属性中起作用,如“rendered”、“value”和其他属性。
但它在action(动作)中不起作用?或者是我用错了吗?
<h:commandLink action="#{true ? bean.methodTrue() : bean.methodFalse()}"/>
错误:javax.el.ELException:不是有效的方法表达式
(我使用PrimeFaces Ajax action属性时意识到这一点)
这不受支持。 action
属性应该是一个 MethodExpression
,但条件运算符将其变成了 ValueExpression
语法。我认为这永远不会支持 EL 中的 MethodExpression
。
你基本上有两个选择:
创建一个单独的动作方法来委托工作。
<h:commandButton ... action="#{bean.method}" />
使用
public String method() {
return condition ? methodTrue() : methodFalse();
}
如果必要的话,可以通过 #{bean.method(condition)}
将其作为方法参数传递。<h:commandButton ... action="#{bean.methodTrue}" rendered="#{bean.condition}" />
<h:commandButton ... action="#{bean.methodFalse}" rendered="#{not bean.conditon}" />