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')}"/>
取り急ぎメモ。