2012-05-06 13 views
20

El operador condicional funciona en muchos atributos como "valor" "representado" y otros.¿Es posible usar el operador condicional EL en el atributo de acción?

¿Pero no funciona en la acción? ¿O lo estoy haciendo mal?

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

error: javax.el.ELException: No es un método válido Expresión

(me di cuenta que el uso de PrimeFaces atributo de acción Ajax)

+1

De acuerdo con esto, no es posible [EL condicional Expresión Método] (http://stackoverflow.com/questions/5433876/el-conditional-method-expression) – Fallup

+0

gracias, espero que esto se resuelto en futuras actualizaciones – djmj

Respuesta

44

Esto no es compatible. Se supone que el atributo action es MethodExpression, pero el operador condicional lo convierte en una sintaxis ValueExpression. No creo que esto sea compatible con MethodExpression s en EL.

Usted tiene básicamente 2 opciones:

  1. crear un único método de acción que delega el trabajo.

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

    con

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

    Si es necesario, pase en como argumento de un método por #{bean.method(condition)}.

  2. O, condicionalmente renderice 2 botones.

    <h:commandButton ... action="#{bean.methodTrue}" rendered="#{bean.condition}" /> 
    <h:commandButton ... action="#{bean.methodFalse}" rendered="#{not bean.conditon}" /> 
    
+1

Buena respuesta como siempre – hendrix

+0

¿Qué es preferible? – alexander

+1

@Alex: la manera que mejor se adapta a su modelo. Sin embargo, la segunda forma tiene el requisito adicional de que la condición se debe preservar en la solicitud, lo cual es mejor logrando ubicando bean en el alcance de la vista, de lo contrario, se encontrará con el problema descrito como # 5 en http: // stackoverflow. com/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invooked – BalusC

Cuestiones relacionadas