值更改侦听器无法在primefaces日历中工作

mru*_*ker 21 ajax primefaces jsf-2

我正在使用primefaces 3.2和JSF 2.0

我的方案是我的表单中有文件日期,上次日期和下一个日期.当用户输入文件日期时,我需要更新bean中的文件日期值,因此它的值可以用作属性mindate的最后日期的最小日期,因此在下一个日期选择中也是如此.

根据我的知识值,更改侦听器可以在表单提交时执行,因此我无法使用它.我用过p:ajax.但我仍然无法设置文件日期.由于未设置文件日期,因此用户可以选择文件日期日期之前的最后日期和下一个日期.

caseMaster.xhtml

<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
    <p:ajax event="change" listener="#{caseUitility.dateChange}"/>
</p:calendar>

<p:calendar value="#{caseUitility.caseMaster.lastDate}" required="true" id="lastDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true" mindate="#{caseUitility.caseMaster.fileDate}" >
</p:calendar>
Run Code Online (Sandbox Code Playgroud)

CaseUitility.java

public void dateChange(ActionEvent ae) {
    System.out.println("File Date: " + caseMaster.getFileDate());
    System.out.println("Hello... I am in DateChange");
}
Run Code Online (Sandbox Code Playgroud)

谁可以指导我在这里做错了什么?

Dan*_*iel 37

在最新版本的PrimeFaces中,SelectEvent应该使用以下代码片段

<p:calendar id="event" value="#{calendarView.date4}">
    <p:ajax event="dateSelect" listener="#{calendarView.onDateSelect}" update="msgs" />
</p:calendar>
Run Code Online (Sandbox Code Playgroud)
public void onDateSelect(SelectEvent event) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getObject())));
}
Run Code Online (Sandbox Code Playgroud)

在较旧的primefaces版本中使用 DateSelectEvent

<p:ajax event="dateSelect" listener="#{caseUitility.dateChange}"/>
Run Code Online (Sandbox Code Playgroud)
public void dateChange(DateSelectEvent event) {
    Date date = event.getDate();
    System.out.println("File Date: " + date);
    System.out.println("Hello... I am in DateChange");
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎您,primefaces提供您需要的所有信息,在用户指南中提供:http://primefaces.org/documentation.html (3认同)

roe*_*oel 18

您应该为p:ajax添加更新.使用datepicker选择日期时以及在字段中手动输入日期时遇到问题.变更事件未被双向触发.因此我使用了p:ajax和af:ajax,它们具有不同的事件.

<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
    <p:ajax event="dateSelect" listener="#{caseUitility.dateSelect}" update="lastDate"/>
    <f:ajax event="change" execute="@this" render="lastDate" listener="#{caseUitility.dateChange}"/>
</p:calendar>
Run Code Online (Sandbox Code Playgroud)

而在豆

public void dateSelect(DateSelectEvent event) {
    caseMaster.setFileDate(event.getDate());
    System.out.println("File Date: " + caseMaster.getFileDate());
    System.out.println("Hello... I am in DateChange");
}

public void dateChange(AjaxBehaviorEvent event) throws MWSException {
    System.out.println("File Date: " + caseMaster.getFileDate());
    System.out.println("Hello... I am in DateChange");
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助