こんにちは、選択属性を実装する類似の CC を実装したいと考えています。これは、Primeface のインスタント行選択 に似てい<p:dataTable selection="#{bean.user}" .../>
ます。
これは、コンポジット内の関連する定義です。
<composite:interface componentType="my.CcSelection">
<composite:attribute name="actionListener" required="true"
method-signature="void listener(javax.faces.event.AjaxBehaviorEvent)"/>
<composite:attribute name="selection"/>
</composite:interface>
<composite:implementation>
...
<ui:repeat var="item" value="#{cc.attrs.data}">
<p:commandLink actionListener="#{cc.actionListener(item)}"/>
</ui:repeat>
...
</composite:implementation>
バッキング BeanのactionListener
-method は次のとおりです。
public void actionListener(MyObject object)
{
logger.info("ActionListener "+object); //Always the correct object
FacesContext context = FacesContext.getCurrentInstance();
Iterator<String> it = this.getAttributes().keySet().iterator();
while(it.hasNext()) { //Only for debugging ...
logger.debug(it.next());
}
// I want the set the value here
ValueExpression veSelection = (ValueExpression)getAttributes().get("selection");
veSelection.setValue(context.getELContext(), object);
// And then call a method in a `@ManagedBean` (this works fine)
MethodExpression al = (MethodExpression) getAttributes().get("actionListener");
al.invoke(context.getELContext(), new Object[] {});
}
CC を選択用の値式で使用すると(例: selection="#{testBean.user}"
is veSelection
(null
および選択はデバッグ反復で出力されない)、NPE を取得します。文字列を渡すと (例:selection="test"
属性選択はデバッグで使用可能です) -繰り返し、しかし(もちろん)私は得るClassCastException
:
java.lang.String cannot be cast to javax.el.ValueExpression
コンポーネントにactionListenerとselection属性を提供し、最初のステップで選択した値を設定してからactionListenerを呼び出すにはどうすればよいですか?