かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

取り急ぎメモ。