我使用PrimeFaces日历表示日期范围(为此我使用两个日历)。 如何在运行时更改日期范围,以便第一个日历范围将小于或等于第二个日历值。例如,时间范围:http://www.primefaces.org/showcase-ext/sections/timePicker/timeRange.jsf
答案 0 :(得分:7)
您只需要使用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}"/>
希望这可以帮助你:)
答案 1 :(得分:0)
上一个答案的补充:
这会做得很好,但不是一件完整的事情,即使您手动编辑它,也可以通过,并且范围将为false。 为此,您需要实现一个自定义的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" />