2012-05-06 8 views
20

条件演算子は、 "レンダリングされた" "値"などの多くの属性で機能します。action属性にEL条件演算子を使用できますか?

しかし、実際には動作しませんか?それとも間違っているのですか?

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

エラー:javax.el.E​​LException:ない有効なメソッド式

(私はprimefaces Ajaxのaction属性を使用してそれを実現)

+1

[EL条件付きメソッド式](http://stackoverflow.com/questions/5433876/el-conditional-method-expression) – Fallup

+0

おかげで、これは取得願っています将来の更新で解決しました – djmj

答えて

44

これはサポートされていません。 属性はMethodExpressionとなっていますが、条件付き演算子ではValueExpressionという構文になります。私はこれがELのMethodExpressionでサポートされるとは思わない。

あなたは基本的に2つのオプションがあります:

  1. は、代表者の仕事単一のアクションメソッドを作成します。

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

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

    必要に応じて、#{bean.method(condition)}によってメソッド引数として渡します。

  2. または条件付きで2つのボタンをレンダリングします。これによると、それは不可能です

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

いつものように良い答え – hendrix

+0

何が望ましいですか? – alexander

+1

@Alex:あなたのモデルに最適な方法。しかし、2番目の方法では、条件内で条件を保持しなければならないという追加要件があります。これは、ビュースコープにBeanを置くことによって実現するのが最善です。そうしないとhttp:// stackoverflowの#5で説明した問題が起こります。 com/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invoked – BalusC