【问题标题】:PrimeFaces 3.3.1 calendar disable future dates, in international applicationPrimeFaces 3.3.1 日历在国际应用中禁用未来日期
【发布时间】:2012-06-28 20:38:01
【问题描述】:

我正在 Tomcat 6 上使用 Primefaces 3.3.1 编写 JSF 2.0 Mojarra 应用程序。使用 PrimeFaces <p:calendar> 组件,我需要禁用未来日期。我意识到我必须将 maxdate 属性设置为当前日期。但是,我不确定最简单的方法是什么。

我意识到我可以创建一个java.util.Date 的托管 Bean,但这是一个国际应用程序,我需要考虑用户的位置。如果用户在世界的​​另一端,服务器日期对他来说可能不正确。

那么,在用户所在位置检索当前日期并将<p:calendar> maxdate 属性设置为等于该值的最简单方法是什么? 一个完全客户端的解决方案将是理想的,如果可以的话。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    正如 primefaces-chief Cagatay Civici 已经指出的那样,您可以使用 p:calendar maxDate。因为我不打算将我的 facelets 与 JS 混为一谈,所以我就是这样做的:

    方面:

    <p:calendar maxdate="#{bean.today}" />
    

    豆子:

    public Date getToday() {
            return new Date();
        }
    

    所以没有未来可以选择。

    【讨论】:

    • 正如我的问题所述,这并不能解决问题,因为它返回服务器日期,而不是用户的本地日期。标记的答案是正确的。
    • 哎呀,我不知何故错过了:(
    • 用户可以输入以前的日期。如何限制他写上一个日期。
    • 用户可以输入以前的日期。如何限制他写上一个日期
    【解决方案2】:

    可以获取客户端系统日期。

    &lt;p:calendar&gt; calendar 是一个 jquery-ui 小部件,您可以通过定义 widgetVar 并使用 javascript 设置 maxdate 来获得客户端访问权限。

    <p:calendar widgetVar="myCalendar" />
    <script type="text/javascript">
         jQuery(document).ready(function(){
            myCalendar.jqEl.datepicker("option", "maxDate", +0);//set maxDate to today
         });     
    </script>
    

    【讨论】:

    • 嘿,太棒了。我会试试看。对不起,如果这是一个愚蠢的问题,但第三个参数的格式有什么后果吗?也就是说,如果我使用“dd-MMM-yy”怎么办?再次感谢!
    • 它应该与我的pattern 属性的格式相匹配吗?这目前是“dd-MMM-yy”,它正在工作,尽管我现在在 jQuery 文档中看到“MM”是月份名称的格式。我是否使用了不正确的格式?
    • p:calendar 也有 maxDate 为您执行此操作。
    • @CagatayCivici,感谢您的评论。我喜欢 PrimeFaces!您是说 jQuery 解决方案有替代方案吗?我正在使用 maxDate,但我不确定如何最好地获取客户的当前日期。
    • @GuilhermeTorresCastro 我无法让 jQuery 解决方案正常工作。我尝试了几种变体,包括删除我的pattern 属性,以防它以某种方式发生冲突。我一直在阅读文档,但无法弄清楚。这是我目前正在尝试的示例:&lt;p:calendar id="dateName" pattern="dd-MMM-yyyy" required="true" value="#{someBean.dateProperty}" navigator="true" widgetVar="dateName"/&gt;&lt;script type="text/javascript"&gt; jQuery(document).ready(function(){dateName.jqEl.datepicker("option", "maxDate", "dd-M-yy");});&lt;/script&gt;
    【解决方案3】:

    我们也可以使用 faces-config.xml 来定义 currentDate bean

    enter code here
    <managed-bean>
        <managed-bean-name>currentDate</managed-bean-name>
        <managed-bean-class>java.util.Date</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    

    然后在.xhtml中使用

    <p:calendar maxdate="#{currentDate}" />
    

    【讨论】:

      【解决方案4】:

      它比这更简单 它禁用所有过去的日期,直到当天

      【讨论】:

      • 除了可能过滤掉错误的日期之外,OP 将如何实现这一点。他可以在客户端这样做吗?
      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2018-06-28
      • 1970-01-01
      相关资源
      最近更新 更多