かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

PrimeFacesのp:ajaxを複合コンポーネントに入れたい

JSF2.0になって、簡単なコンポーネントなら自作できるようになったけど、情報が少なくてはまると辛い。

PrimeFacesのp:ajaxのlistener属性にcc:attributeから指定したメソッドを設定しようとするとリンク先のようなエラーがでる。
http://stackoverflow.com/questions/15420081/jsf2-0-composite-component-with-optional-method-expression
リンク先では、cc.getValueExpression('name')がemptyかどうかでrenderedを切り分けて対処してるけど、p:ajaxではうまくいかなかった。p:ajaxの場合はdisabledにrenderedと逆の条件を指定してやらないといけなかった。renderedは、指定してもしなくても変わらない。

<cc:attribute name="update" required="false" />
<cc:attribute name="someListener" method-signature="void action(org.primefaces.event.****Event)" required="false" />

<p:ajax 
  event="hoge" 
  update="#{cc.attrs.update}" 
  listener="#{cc.attrs.someListener}"
  disabled="empty #{cc.getValueExpression('someListener')}"/>
<p:ajax 
  event="hoge" 
  update="#{cc.attrs.update}" 
  listener="#{cc.attrs.someListener}"
  disabled="!empty #{cc.getValueExpression('someListener')}"/>

取り急ぎメモ。