Is it possible to use EL conditional operator in action attribute?
Asked Answered
E

1

29

The conditional operator works in many attributes like "rendered" "value" and others.

But it does not work in action? Or am I doing it wrong?

<h:commandLink action="#{true ? bean.methodTrue() : bean.methodFalse()}"/>

Error: javax.el.ELException: Not a Valid Method Expression

(I realized it using primefaces ajax action attribute)

Endoskeleton answered 6/5, 2012 at 19:53 Comment(2)
According to this, it is not possible EL conditional Method ExpressionNun
thanks, hope this gets resolved in future updatesEndoskeleton
A
53

This is not supported. The action attribute is supposed to be a MethodExpression, but the conditional operator makes it a ValueExpression syntax. I don't think this will ever be supported for MethodExpressions in EL.

You have basically 2 options:

  1. Create a single action method which delegates the job.

    <h:commandButton ... action="#{bean.method}" />
    

    with

    public String method() {
        return condition ? methodTrue() : methodFalse();
    }
    

    If necessary, pass it in as method argument by #{bean.method(condition)}.

  2. Or, conditionally render 2 buttons.

    <h:commandButton ... action="#{bean.methodTrue}" rendered="#{bean.condition}" />
    <h:commandButton ... action="#{bean.methodFalse}" rendered="#{not bean.conditon}" />
    
Araucaria answered 28/5, 2012 at 19:46 Comment(5)
@Alex: the way which fits your model the best. The second way has however the additional requirement that the condition must be preserved in the request, which is best to be achieved by placing bean in view scope, othwewise you'll stumble upon the problem described as #5 in #2119156Araucaria
@Araucaria view scope is just fine for my requirement and it works perfectly. Thank you again. For further times: Alexander is just fine (Don't know, but hate Alex for me). :)Uncinus
Would the same apply to an outputLink?Retroaction
@MichaelMiner: output link doesn't have any method expression attribute in first place.Araucaria
2nd Option is the best!Prog

© 2022 - 2024 — McMap. All rights reserved.