【发布时间】:2012-08-15 16:52:31
【问题描述】:
我们必须在 Facelets 页面上显示年份字段。
<h:outputText value="#{dateTOloginDate.get(Calendar.YEAR)}"/>
这总是返回 1 而不是年份值。我怎样才能实现它?
【问题讨论】:
-
我发布了代码但没有格式化。无论如何,我发现了这个问题。我们应该使用 get(1),而不是 get(Calendar.YEAR)。
我们必须在 Facelets 页面上显示年份字段。
<h:outputText value="#{dateTOloginDate.get(Calendar.YEAR)}"/>
这总是返回 1 而不是年份值。我怎样才能实现它?
【问题讨论】:
Calendar.YEAR 是一个常量字段值。默认情况下,常量字段值在 EL 范围内根本不可用。然而,硬编码的常量值确实有效,就像您自己遇到的那样。
有几种方法可以更简洁地实现这一点:
请改用<f:convertDateTime>。您只需通过Calendar#getTime() 获取java.util.Date 实例。
<h:outputText value="#{dateTOloginDate.time}">
<f:convertDateTime pattern="yyyy" />
</h:outputText>
使用OmniFaces<o:importConstants>。它允许您将给定类型的常量字段值导入 EL 范围。这样您就可以完全使用预期的语法。
<o:importConstants type="java.util.Calendar" />
...
<h:outputText value="#{dateTOloginDate.get(Calendar.YEAR)}" />
只是,这是 IMO 的一个极端用例。我个人更喜欢<f:convertDateTime> 方式。如果您只使用java.util.Date 而不是笨拙的java.util.Calendar,那也会更理想。我看不出将java.util.Calendar 作为模型值类型有什么好处。
【讨论】: