Date JSF表单需要更新一个字段
我有一个带有两个日期的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
- 填写结束日期-->时,应计算并填写天数
- 填写日期时(例如:31)-->则应填写结束日期
<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();
}