PrimeFaces日历范围



我使用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" />

最新更新