在JSF页面上显示当前date

是否有可能在JSF中显示当前date(今天),而不使用支持bean?

我有以下代码片段,但它没有工作。

<div class="leftSide">Today's date #{currentDate}</div> 

要么

 <f:facet name="header"> <h:outputText value="Today's date" /> </f:facet> <h:outputText value="#currentDate"> <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> </h:outputText> 

您可以在faces-config.xml中将java.util.Date的实例注册为请求范围的bean。

 <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> 

这样,它可以作为#{currentDate}而不需要自定义的支持bean类。


更新 :JSF实用程序库OmniFaces有一个已经注册为#{now}的bean。 所以如果你碰巧使用了OmniFaces,你可以直接使用它。

 <h:outputText value="#{now}"> <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> </h:outputText> 

在JSF中,您可以使用提供对当前HttpSession的访问的隐式EL对象sessionHttpSession#getLastAccessedTime时间…

…返回客户端最后一次发送与此会话相关的请求的时间,为自1970年1月1日午夜以来的毫秒数,并且标记为容器接收到请求的时间。

所以你可以在你的facelet中使用下面的代码片段:

 <h:outputText value="#{session.lastAccessedTime}"> <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> </h:outputText> 

这将是服务器时间,并可能与客户端时间不同的时区有所不同。

但是,您也可以使用JavaScript解决scheme,如下所述:

如何在JavaScript中获取当前date?

或者你可以使用Omnifaces来完成。 我很惊讶BalusC没有告诉你这个解决scheme(我认为他是一个伟大的Omnifaces贡献者)。 也许是因为使用Omnifaces只是为了在页面中显示一个简单的date可能是一些矫枉过正。

无论如何,如果你的项目已经使用了Omnifaces ,那么默认情况下有两个托pipe的bean被暴露,特别是你可能会觉得方便。 根据标签文档指定,一旦Omnifaces添加到您的项目,您可以使用#{now}托pipe的bean。

例如,要设置Primefaces日历的最大date,我只写了以下内容:

  <p:calendar id="myCalendar" pattern="dd/MM/yyyy" value="#{mybean.myDate}" maxdate="#{now}"/> 

我猜#{now}pipe理的bean可以用在更多的情况下,也可能是你的。

如果你的项目还没有使用Omnifaces,我build议你看看他们的规范,看看它对你有多大的帮助。 例如,我正在使用他们的validateOrder标签来确保两个date正确地sorting。