Primefaces 日历监听器不影响变量数据

Primefaces Calendar Listener not affecting data to variable

我有两个 Datepicker/Calendar(Primefaces) ,我想做的是当我点击第二个日历时,我会调用一个监听器来计算两者之间的天数这两个日期。这就是我所做的:

网页

<a:column span="4" >
            <a:label value="Begining Date" span="4"   required="true"  ></a:label>
            <a:column span="8">
                <p:calendar  id="idBegDate"  value="#{addController.enti.begDate}"
                             pattern="dd/MM/yyyy"  label="Begining Date" 
                             readonlyInput="true" locale="fr" navigator="true"
                             required="true" >

                </p:calendar>

            </a:column>
        </a:column>

        <a:column span="4" >
            <a:label value="End Date" span="4"   required="true"  ></a:label>
            <a:column span="8">
                <p:calendar  id="idDateFin"  value="#{addController.enti.dateFinAbsAgt}"
                             pattern="dd/MM/yyyy"  label="End Date" 
                             readonlyInput="true" locale="fr" navigator="true"
                             required="true" >
                    <p:ajax event="dateSelect" listener="#{addController.doCalculate()}" update="jourCalendaire" />
                </p:calendar>

            </a:column>
        </a:column>

支持 Bean

public void doCalculate()
{
//..Some Stuffs
}

问题是当调用监听器时它说 dateOfBeginingNULL 而它不应该是。

我通过在 first calendar:

中添加一个空的 listener 找到了这个问题的解决方案
public void emptyListener()
{

}

我认为这不合逻辑,所以我想知道 webpage/backingBean 为什么会有这种行为?有没有办法只使用第二个日历的监听器?

谢谢

在第二个日历的 p:ajax 上,您需要添加 process="@this idBegDate" 以便 JSF 知道获取 @this(第二个日历)和 idBegDate 的值(第一个日历)并将其放入您的模型对象中。

除非您进行处理,否则视图中的任何内容都不会返回到服务器。将 p:ajax 添加到第一个日历会为您处理。