我尝试以这种方式使用带有弹出窗口的primefaces日历:
<p:calendar pattern="yyyy-MMM-dd" value="#{controller.beginDate}" mask="true" navigator="true">
<f:ajax event="valueChange" listener="#{controller.onChange}" />
</p:calendar>
这是相对控制者:
@ManagedBean
public class Controller {
private Date beginDate;
public Date getBeginDate() {
return beginDate;
}
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
public void onChange() {
// do somethings
}
}
问题:如果我从输入字段更改值,则事件将执行,但如果我从弹出窗口更改它,则事件将不会执行。
任何人都可以帮助我吗?
答案 0 :(得分:5)
valueChange
事件仅由HTML DOM change
事件触发。当通过JavaScript方式操纵输入值时,确实不会触发此操作。
您需要dateSelect
事件。而且,在PrimeFaces组件中,您最好使用<p:ajax>
代替<f:ajax>
。
<p:calendar ...>
<p:ajax event="valueChange" listener="#{controller.onChange()}" />
<p:ajax event="dateSelect" listener="#{controller.onChange()}" />
</p:calendar>
答案 1 :(得分:1)
尝试使用PrimeFaces dateSelect事件。
来自PrimeFaces文档:
Calendar提供dateSelect ajax行为事件,以便在选择日期时执行即时ajax选择。如果将方法定义为侦听器,则通过传递org.primefaces.event.SelectEvent实例来调用它。
<p:calendar value="#{calendarBean.date}">
<p:ajax event="dateSelect" listener="#{bean.handleDateSelect}" />
</p:calendar>