PrimeFaces:如果“timeOnly ='true'”和“minDate”& “maxDate”在同一天

时间:2013-09-24 14:44:09

标签: jsf-2 primefaces calendar timepicker

我使用PrimeFaces v3.5.14进行了以下测试页:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Test page</title>
    </h:head>
    <h:body>
        <h:form>
            <p:calendar pattern="MMMM dd, yyyy hh:mma" value="#{mrBean.date}"
                        mindate="#{mrBean.minDate}" maxdate="#{mrBean.maxDate}" />

            <p:calendar pattern="HH:mm" value="#{mrBean.date}" timeOnly="true" 
                        mindate="#{mrBean.minDate}" maxdate="#{mrBean.maxDate}" />
        </h:form>
    </h:body>
</html>

这是我的@ManagedBean

@ManagedBean
@RequestScoped
public class MrBean {
    private Date minDate;
    private Date maxDate;
    private Date date;

    @PostConstruct
    public void prepareServices() {
        this.minDate = new Date();
        this.maxDate = new DateTime().plusHours(1).toDate();
    }

    // Getters and Setters   
}

简而言之,如果minDatemaxDate恰好在同一天,<p:calendar>就不会显示timeOnly="true"

如果您能告诉我这是PrimeFaces的错误还是我在这里做错了,我将非常感激。

1 个答案:

答案 0 :(得分:0)

基本上,mindatemaxdate打破了第二个日历,因为它应该是timeOnly。删除该属性,你会看到它的工作原理。所以,比方说,你的第一个日历适用于日期,第二个日历适用于时间。

如果要在现在和一小时之间限制所选时间,请计算服务器中的当前时间并使用minHourmaxHour。这会将您选择的时间设置为从Jan 1, 1970开始的日期。如果您愿意,可以将它与您在其他日历中所做的选择结合起来。

当然,这样做有其缺点。它允许您在同一小时内选择每一分钟(记住您只限制小时),即使它已经过去了。为了达到你想要的效果,你的第一个日历似乎是最好的选择。


使用PrimeFaces 3.5进行测试