2012-05-06 7 views
20

L'operatore condizionale funziona in molti attributi come "rendering" "valore" e altri.È possibile utilizzare l'operatore condizionale EL nell'attributo azione?

Ma non funziona in azione? O sto sbagliando?

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

Errore: javax.el.ELException: Non è un valido metodo di espressione

(ho capito che usando primefaces attributo action Ajax)

+1

In base a questo, non è possibile [EL Metodo condizionale Espressione] (http://stackoverflow.com/questions/5433876/el-conditional-method-expression) – Fallup

+0

grazie, spero che questo ottiene risolto in futuri aggiornamenti – djmj

risposta

44

Questo non è supportata. L'attributo action dovrebbe essere un MethodExpression, ma l'operatore condizionale lo rende una sintassi ValueExpression. Non credo che questo sarà mai supportato per MethodExpression s in EL.

che, fondamentalmente, 2 opzioni:

  1. creare un unico metodo di azione che delega il lavoro.

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

    con

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

    Se necessario, passare dentro come metodo argomentazione #{bean.method(condition)}.

  2. Oppure, eseguire condizionalmente 2 pulsanti.

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

Buona risposta come sempre – hendrix

+0

Cosa è preferibile? – alexander

+1

@Alex: il modo migliore per adattarsi al tuo modello. Il secondo modo ha tuttavia il requisito aggiuntivo che la condizione debba essere preservata nella richiesta, che è meglio ottenere posizionando il bean in scope, altrimenti incapperai nel problema descritto come # 5 in http: // stackoverflow. it/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invoked – BalusC