コンポジットコンポーネントを実装していて、解決策が見つからない問題が見つかりました。JSF2.0 - オプションのメソッド式を持つコンポジットコンポーネント
ページの作成者が渡すことができる属性を指定しましたが、渡されなかった場合はコンポジットコンポーネントはメソッド属性(アクションにメソッド式)を指定できませんでしたcomposite:implementationタグ内のmethod属性を使用します。ここで
私のコードは:
<composite:interface>
<composite:attribute name="namePrompt" required="true"/>
<composite:attribute name="actionMethod" method-signature="java.lang.String action()" required="false"/>
<composite:attribute name="showComponent" default="false"/>
</composite:interface>
<composite:implementation>
<div>
<p:commandLink actionListener="#{cc.attrs.actionMethod}"
rendered="#{cc.attrs.showComponent}"
>
<h:outputText value="#{cc.attrs.namePrompt}"/>
</p:commandLink>
</div>
</composite:implementation>
それを使用して、私は "actionMethod" 属性が指定されていませんでした。このように:
<util:foo namePrompt="SomeName" showComponent="true"/>
しかし、私はエラーメッセージを取得:
javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.actionMethod}'
これを実行する方法はありますか?
あなたはactionListener' 'にオプションの属性を渡すことができます。あなたはどのようなユースケースを使用していますが、 'actionListener'が解決されず、' commandLink'がレンダリングされたらどうなると思いますか? – partlov
はいリンクコンポーネントがレンダリングされますが、リンクコンポーネントでクリックアクションが発生すると、属性actionMethodのメソッドが定義されていないという文句があります。しかしそれは私の意図ですが、時にはactionMethod属性のアクションメソッドを定義したくありません。これは可能ですか?私は「必須=偽」を置くことが問題を解決すると思った。 –