6

私はMethodExpressionの属性changeListenerとUIコンポーネントを有する(PropertyNotFoundExceptionを取得)評価しますchangeListener属性が設定されている場合のみ、<p:remoteCommand>をレンダリングします。

私は特に属性が設定されているかどうかをチェックするにはいくつかの方法、試してみました:

<c:if test="#{! empty cc.attrs.changeListener}"> 

<p:remoteCommand rendered="#{cc.attrs.changeListener != null}" /> 

をしかし、それを評価しようとするため、私はjavax.el.PropertyNotFoundExceptionを取得代わりに属性としての属性

オプションのメソッド属性が設定されているかどうかをどのように評価できますか?

おかげ

答えて

7

あなたは既に<c:if>と右方向でした。 renderedは決して動かないでしょう。 EL expressionが設定されているかどうかを確認する必要があるのは、EL式全体を実際に値式として評価し、その結果が空でないかどうかを調べることです。EL式がメソッド式を表す場合はもちろん失敗します。

<c:if test="#{not empty cc.getValueExpression('changeListener')}"> 
    ... 
</c:if> 

しかし、この解決法は多少怖いです:あなたはここで値式としてメソッド式を取得しています。しかし、囲まれたEL式を実際に評価していない限り(最初の#{cc.attrs.changeListener}の試みがカバーしているように)、問題はありません。 JSF APIにはUIComponent#getMethodExpression()のようなものがないので、他のクリーンな方法はありません。