23

我正在使用 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>

CaseUitility.java

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

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

4

6 回答 6

40

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

<p:calendar id="event" value="#{calendarView.date4}">
    <p:ajax event="dateSelect" listener="#{calendarView.onDateSelect}" update="msgs" />
</p:calendar>
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())));
}

在旧的 primefaces 版本中使用DateSelectEvent

<p:ajax event="dateSelect" listener="#{caseUitility.dateChange}"/>
public void dateChange(DateSelectEvent event) {
    Date date = event.getDate();
    System.out.println("File Date: " + date);
    System.out.println("Hello... I am in DateChange");
}
于 2012-12-31T09:46:11.533 回答
18

您应该向您的 p:ajax 添加更新。使用日期选择器选择日期以及在字段中手动输入日期时遇到问题。更改事件不是双向触发的。因此,我使用 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>

而在豆子里

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");
}

希望这可以帮助

于 2012-12-31T09:49:29.940 回答
1

我的解决方案:

<p:ajax event="change" listener="#{caseUitility.dateChange}"/>

在 bean 中:

public void dateChange(SelectEvent event) 
{   
      date = (Date)event.getObject();
}
于 2014-09-24T16:06:38.170 回答
0

我认为你必须考虑这样做:

<p:calendar id="fileDate" value="#{caseUitility.caseMaster.fileDate}" navigator="true" effect="slideDown" mindate="#{caseUitility.today}" readOnlyInputText="true" pattern="dd/MM/yyyy HH:mm" required="true"  showOn="button" autocomplete="false">
    <p:ajax event="focus" listener="#{caseUitility.dateChange}" update="lastDate" />
</p:calendar>

public void dateChange()  {
     System.out.println("File Date: " + caseMaster.getFileDate());
}

如果您使用“焦点”事件,它将在 change 或 dateSelect 时触发,用于日历 primefaces 控件。

于 2013-11-08T19:40:24.603 回答
0

使用 ajax 事件作为 dateSelect like

<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
        <p:ajax event="dateSelect" process="@this" update="lastDate" 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>

听众,

public void dateChange(SelectEvent event) {
    System.out.println("File Date: " + (Date) event.getObject());
    System.out.println("Hello... I am in DateChange");
}

但请记住,您不应在进程中使用任何其他组件 ID(意味着进程中只允许使用 @this),否则侦听器将无法工作。

于 2017-02-17T10:31:24.750 回答
0

您可以使用onstartand oncomplete(没有出现在 primefaces 文档中)。

我解决了这个问题:

<p:calendar
      id="fromDate"
      value="#{reportBean.fromDate}"
      pattern="dd/MM/yyyy"
      locale="es"
      maxdate="#{reportBean.untilDate}">
      <p:ajax event="dateSelect" 
          onstart="openModal();" 
          oncomplete="closeModal();"  
          update="untilDate div_report"/>
</p:calendar>

Javascript:

function openModal(){
    $('#mdlLoading').modal('open');
}
function closeModal(){
    $('#mdlLoading').modal('close');
}

希望这对某人有帮助!

于 2017-10-05T11:43:25.660 回答