Date JSF表单需要更新一个字段

Date JSF表单需要更新一个字段,date,jsf,primefaces,ajax,Date,Jsf,Primefaces,Ajax,我有一个带有两个日期的JSF表单。开始日期是必需的 我需要两件事: 填写结束日期-->时,应计算并填写天数 填写日期时(例如:31)-->则应填写结束日期 在JSF中如何做到这一点 我的表格: <h:form id="date"> <h:panelGrid columns="3"> <p:outputLabel for="startDate" value="Start Date"/> <p:calendar

我有一个带有两个日期的JSF表单。开始日期是必需的

我需要两件事:

  • 填写结束日期-->时,应计算并填写天数
  • 填写日期时(例如:31)-->则应填写结束日期
在JSF中如何做到这一点

我的表格:

<h:form id="date">

    <h:panelGrid columns="3">
        <p:outputLabel for="startDate" value="Start Date"/>
        <p:calendar id="startDate" value="#{dateBean.startDate}" required="true" pattern="d MMM yyyy"/>
        <p:message for="startDate"/>

        <p:outputLabel for="endDate" value="End Date"/>
        <p:calendar id="endDate" value="#{dateBean.endDate}" pattern="d MMM yyyy"/>
        <p:message for="endDate"/>

        <p:outputLabel for="days" value="Days"/>
        <p:inputText id="days" value="#{dateBean.days}"/>
        <p:message for="days"/>
    </h:panelGrid>

</h:form>

一个建议是使用

它可以引导您满足您的需求,因此您可以这样做:

<fmt:parseNumber
    value="${(dateBean.endDate - dateBean.startDate) / (1000*60*60*24) }"
    integerOnly="true" var="daysDifference"/>

并将字段值设置为:(通过jQuery/javascript触发结束日期字段的更改进行更新)


使用Javascript
onchange
事件,只需使用所需结果更新字段即可

<p:calendar id="endDate" value="#{dateBean.endDate}" onchange="alertDateSelected()"/>


我宁愿采用内置的Primefaces方法。有一个名为
dateSelect
的事件,当日期更改时将触发该事件:

Calendar提供一个dateSelect ajax行为事件,以便在选择日期时执行即时ajax选择。如果将方法定义为侦听器,将通过传递
org.primefaces.event.SelectEvent
实例来调用该方法

使用此选项,
endDate
如下所示(忽略日期格式属性,这似乎是错误的):

对于
days
标记,我将使用在更改时触发事件,即当字段中的值更改时:

<p:inputText id="days" value="#{dateBean.days}">
    <p:ajax event="change" update="endDate" listener="#{dateBean.handleDaysChange}" />
</p:inputText>

根据您的日期字段,格式是否为:MM/dd/yyyy?正确:我使用了默认格式:MM/dd/yyyy您是在写日期还是在通过弹出式日历选择日期?如果在-->中填写结束日期,则应计算并填写日期。这个链接提供的正是您想要的:OmniFaces通过收集有关日期的EL函数,真的可以为您节省几个小时。
<p:calendar id="endDate" value="#{dateBean.endDate}" onchange="alertDateSelected()"/>
<p:calendar id="endDate" value="#{dateBean.endDate}">
    <p:ajax event="dateSelect" listener="#{dateBean.handleDateSelect}" update="days" />
</p:calendar>
public void handleDateSelect(SelectEvent event) {
    Date date = (Date) event.getObject();
    // the below method would calculate the difference in days between the dates
    calculateDaysIfStartDateIsFilled(date);
}
<p:inputText id="days" value="#{dateBean.days}">
    <p:ajax event="change" update="endDate" listener="#{dateBean.handleDaysChange}" />
</p:inputText>
public void handleDaysChange() {
    calculateToDateIfStartDateIsFilled();
}