【发布时间】:2013-03-13 17:15:50
【问题描述】:
我不确定如何正确地提出这个问题,但我会尝试这样: 问题是关于 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>
我的复合豆:
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}" />
在上面的代码中,我试图在 compotents bean 中捕获新值,但日志看起来像这样:
valueChanged
事件1
设置日期
当我在 valueChangedListener 中时,我仍然有日历的旧值。最后设置新值。
所以,首先我想在我的复合 bean 中获得新的价值。但我的主要问题是:
如何在我的 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...
【问题讨论】:
标签: ajax jsf jsf-2 primefaces composite-component