1

我想在p:calendar. 在我的设置中,我有一个@Named @ViewScopedBean,该类ObWithDate是一个@Entity带有 date 字段validFrom的类。

<h:form id="fUser">
  <p:dataTable id="dt" var="cum" value="#{myBean.listObWithDates}">
    <p:column>
      <p:calendar id="cValidFrom" value="#{cum.validFrom}">  
        <p:ajax event="dateSelect" listener="#{myBean.update(cum)}"
                update=":fUser:dt"/>  
      </p:calendar>  
    </p:column>
  </p:dataTable>
</h:form>

update(ObWithDate myO)好消息是,每次我选择日期时,都会使用正确的对象调用bean 方法。不好的是,它myO.validFrom没有正确的值。它总是落后一步

  • 用 2012-01-01 初始化的字段
  • GUI 更改为 2012-01-05,bean 方法调试到 2012-01-01
  • GUI 更改为 2012-01-15,bean 方法调试到 2012-01-05

这个问题让我发疯,我发现了几个未正确更新值的问题,还有一些关于p:calendar. 他们中的大多数人建议将属性selectListener="#{calendarBean.handleDateSelect}"handleDateSelect(DateSelectEvent event)方法一起使用。但我想调用我的方法,因为我想传递变量的当前实例。

  • Firebug 验证,正确的更新值在 POST 请求中传输
  • 我正在使用 Primefaces 3.2 和 JBoss-7.1.1-Final
  • 即使没有p:dataTable并且仅使用p:calendar该问题仍然是相同的。
  • 对于 method-Object以及 中的相应条目,可以观察到调试输出的错误值。update(ObWithDate myO)myBean.listObWithDates
  • <p:ajax immediate="true" .../>不能解决这个问题。

更新MattHandy对我帮助很大,产生的问题How to get the对应的list item in the ajax call inside the beans method? 在后续JSF p:calendar in p:dataTable: How to get the row of p:ajax dateSelect event中制定。

4

2 回答 2

3

这很可能是生命周期问题。在侦听器执行之前调用字段的设置器。您不应该使用侦听器来设置您的值。

监听器上的 el 表达式在上一个请求的渲染响应阶段进行评估,因此它的cum值是“落后一步”。

您应该从日历日期值的设置器更新您的自定义对象。

于 2012-04-16T16:41:09.647 回答
1

我今天早上遇到了这个问题。发现 primefaces 已经从 Primefaces 3.5 中删除了 DateSelectEvent 。因此必须从我的日历对象中删除 ajax 事件调用。而是使用 get..() 检索值。请在下面的链接中找到相同的讨论。 http://forum.primefaces.org/viewtopic.php?f=3&t=27590

于 2013-06-03T17:04:22.003 回答