我使用PrimeFaces日历来表示日期范围(为此我使用两个日历)。如何在运行时更改日期范围,以便第一个日历范围小于或等于第二个日历值。例如,时间范围:http://www.primefaces.org/showcase-ext/sections/timePicker/timeRange.jsf
您只需要将 p:ajax 与 dateSelect 事件一起使用,并在 ManageBean 方法中更新第二个日历的最小日期范围
例:-
<p:calendar id="fromDate" value="#{calendarView.fromDate}">
<p:ajax event="dateSelect" listener="#{calendarView.onDateSelect}" update="toDate" />
</p:calendar>
<p:calendar id="toDate" value="#{calendarView.toDate}" mindate="#{calendarView.toDateMin}"/>
希望这对你:)有所帮助
对上一个答案的补充:
这将做得很好,但不是完整的,但是当您手动编辑它时,您可以通过,并且范围将是假的。为此,您需要实现一个自定义 JSF 日期验证器。
@FacesValidator("primeDateRangeValidator")
public class PrimeDateRangeValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null) {
return;
}
//Leave the null handling of startDate to required="true"
Object startDateValue = component.getAttributes().get("fromDate");
if (startDateValue==null) {
return;
}
Date startDate = (Date)startDateValue;
Date endDate = (Date)value;
if (endDate.before(startDate)) {
throw new ValidatorException(
FacesMessageUtil.newBundledFacesMessage(FacesMessage.SEVERITY_ERROR, "", "msg.dateRange", ((Calendar)component).getLabel(), startDate));
}
}
}
并将其添加到您的日历中
<f:validator validatorId="primeDateRangeValidator" />