【问题标题】:Accessing a java.util.Calendar field in EL访问 EL 中的 java.util.Calendar 字段
【发布时间】:2012-08-15 16:52:31
【问题描述】:

我们必须在 Facelets 页面上显示年份字段。

<h:outputText value="#{dateTOloginDate.get(Calendar.YEAR)}"/>

这总是返回 1 而不是年份值。我怎样才能实现它?

【问题讨论】:

  • 我发布了代码但没有格式化。无论如何,我发现了这个问题。我们应该使用 get(1),而不是 get(Calendar.YEAR)。

标签: jsf-2 calendar el


【解决方案1】:

Calendar.YEAR 是一个常量字段值。默认情况下,常量字段值在 EL 范围内根本不可用。然而,硬编码的常量值确实有效,就像您自己遇到的那样。

有几种方法可以更简洁地实现这一点:

  1. 请改用&lt;f:convertDateTime&gt;。您只需通过Calendar#getTime() 获取java.util.Date 实例。

    <h:outputText value="#{dateTOloginDate.time}">
        <f:convertDateTime pattern="yyyy" />
    </h:outputText>
    
  2. 使用OmniFaces&lt;o:importConstants&gt;。它允许您将给定类型的常量字段值导入 EL 范围。这样您就可以完全使用预期的语法。

    <o:importConstants type="java.util.Calendar" />
    ...
    <h:outputText value="#{dateTOloginDate.get(Calendar.YEAR)}" />
    

    只是,这是 IMO 的一个极端用例。我个人更喜欢&lt;f:convertDateTime&gt; 方式。如果您只使用java.util.Date 而不是笨拙的java.util.Calendar,那也会更理想。我看不出将java.util.Calendar 作为模型值类型有什么好处。

【讨论】:

    猜你喜欢
    • 2015-05-12
    • 2013-07-26
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2012-05-04
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多