JSF + Primefaces p:ajax on p:selectOneMenu未触发

时间:2012-04-25 14:42:57

标签: jsf primefaces

我有一个包含帐号和两个日期字段的下拉列表。如果我更改下拉列表的值,我想重置日期字段。我还有一个搜索按钮,使用这些字段进行查询(帐号#,从日期到日期)。

<fieldset>
    <p:selectOneMenu id="account_search" value="#{accountHistoryBean.account}" converter="accountConverter">
        <f:attribute name="itemsList" value="#{accountHistoryBean.userAccounts}"/>
        <f:selectItems value="#{accountHistoryBean.userAccounts}" var="account" itemLabel="#{account.number}" itemValue="#{account}"/> 
        <p:ajax update="start_date_search, end_date_search" event="change" actionListener="#{accountHistoryBean.resetDates}" process="account_search"/> 
    </p:selectOneMenu>
<fieldset>

<fieldset>
    <p:calendar value="#{accountHistoryBean.fromDate}" id="start_date_search" pattern="dd/MM/yyyy"/>
</fieldset>

<fieldset>
    <p:calendar value="#{accountHistoryBean.toDate}" id="end_date_search" pattern="dd/MM/yyyy"/>
</fieldset>



<fieldset>
    <p:commandLink styleClass="regular_button" action="#{accountHistoryBean.search}" update=":search :accountHistoryList :accountHistoryList:accountHistTable" >
        <span>#{msj.search}</span>
     </p:commandLink>
 </fieldset>

如果我执行以下操作:

  1. 更改“从日期”和“到日期”字段
  2. 更改帐户字段(使用ajax下拉列表)。
  3. 然后将日期重置为默认值。

    但如果我这样做:

    1. 将“从日期”和“到日期”字段更改为DATEX AND DATEY
    2. 按搜索
    3. 将“从日期”和“到日期”字段更改为DATEX2和DATEY2
    4. 更改帐户字段(使用ajax下拉列表)。
    5. 然后它将Date字段更改为DATEX和DATEY(不是默认值)。

      Bean中的方法如下:

      public void resetDates()
      {
          Calendar calendar = GregorianCalendar.getInstance();
          //By default set toDate as 3/3
          calendar.set(Calendar.MONTH, 2);
          calendar.set(Calendar.DAY_OF_MONTH, 3);
          toDate = calendar.getTime();
          //By default fromDate is one month earlier
          calendar.setTime(toDate);
          calendar.add(Calendar.MONTH, -1);
          fromDate = calendar.getTime();
      }
      
      public String search(){
          //Just update the filters
          lazyDataEntityModel.setUpdateData(true);
          return null;
      }
      

      任何帮助?

2 个答案:

答案 0 :(得分:6)

我改变了

<p:ajax update="start_date_search, end_date_search" 
        event="change" 
        actionListener="#{accountHistoryBean.resetDates}"
        process="account_search"/> 

对于

<p:ajax update="start_date_search, end_date_search" 
        event="change"
        listener="#{accountHistoryBean.resetDates}" 
        process="account_search"/> 

并且有效。

由于

答案 1 :(得分:1)

正确的答案是关于转换器。检查h:selectOneMenu中的value属性!!未正确映射。如果你仍然怀疑立即=“真”,那么没有转换器或验证器将完成他们的工作。这就是我做了,并在4-6小时后工作......:|

感谢您关于转换器的想法,这就是为我提供正确答案的提示。