かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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')}"/>

取り急ぎメモ。