その質問を適切に行う方法がわかりませんが、次のように試みます:質問はPrimefaces、コンポジットのJSF2カレンダーについてです..そのカレンダーが変更された後に呼び出されるイベントをキャッチしたい(そしてその新しい日付値をキャッチしたい)。
私の複合xhtml:
<composite:interface componentType="myComponent">
<composite:attribute name="value" required="true"/>
</composite:interface>
<composite:implementation>
<p:calendar
id="tempCalendar"
pattern="dd.MM.yyyy" value="#{cc.attrs.value}"
valueChangeListener="#{cc.valueChanged}"
validator="DateValidator" converter="MyDateConverter" showOn="button" showButtonPanel="true" navigator="true" >
<p:ajax event="dateSelect" update="@this" listener="#{cc.event1}"/>
</p:calendar>
</composite:implementation>
私の複合のBean:
public void valueChanged(Object event) {
log("valueChanged");
}
public void event1(AjaxBehaviorEvent ab) {
log("Event1");
if (ab != null && ab.getSource() != null && ab.getSource() instanceof Calendar) {
//....
}
}
コンポジットを使用しているページ:
<cc:inputdate value="#{mainBean.aDate}" />
上記のコードでは、コンポテンツ Bean の新しい値をキャッチしようとしていますが、ログは次のようになります。
値が変更されました
イベント1
日付を決める
valueChangedListener にいるとき、カレンダーの古い値がまだあります。最後に新しい値が設定されます。
だから、まず第一に、複合ビーンに新しい価値を持たせたいと思っています..しかし、私の主な質問は次のとおりです。
変更されたときにそのカレンダーの新しい値をキャッチするイベントをmainBeanに実装する方法は?
編集:私の複合今:
<composite:interface componentType="myComponent">
<composite:attribute name="value" required="true"/>
<composite:attribute
name="myListener"
method-signature="void listener()" />
</composite:interface>
<composite:implementation>
<h:panelGroup id="container">
<p:calendar
value="#{cc.attrs.value}"
valueChangeListener="#{cc.valueChanged}"
<p:ajax event="dateSelect" update="@this,:buttonpanel" listener="#{cc.attrs.myListener}"/>
</p:calendar>
</h:panelGroup>
</composite:implementation>
そのようにして、メインページ (mainBean に接続) で呼び出します。
<cc:inputdate
value="#{mainBean.item.myDate}"
myListener="#{mainBean.event1}"/>
mainBean.java の変更後に evet をキャッチしたい...