2012-02-07 52 views
36

是否可以在不使用支持bean的情况下在JSF中显示当前日期(今天)?在JSF上显示当前日期页面

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

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

回答

82

的请求faces-config.xml范围的bean你可以注册的java.util.Date一个实例。

<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有这样一个bean already registered#{now}。所以如果你碰巧使用了OmniFaces,你可以直接使用它。

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

谢谢先生,再次你救了我:) – Namita 2012-02-09 05:28:12

+50

我想要一个谷歌过滤器模式“回答BalusC”。会为我节省很多时间。 – SJuan76 2012-05-23 08:06:09

+3

幸运的是,我的昵称在世界上非常独特(很早以前有目的地决定),所以只需添加“balusc”作为额外的搜索关键字:) – BalusC 2016-04-03 12:56:40

30

在JSF中,你可以使用隐式EL对象session提供访问当前HttpSession。该HttpSession#getLastAccessedTime时间...

...返回最后一次客户端发送与此 会话相关的请求,如午夜以来的毫秒1月1日号,1970年 GMT,并标注由当时容器收到请求。

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

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

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

但你也可以使用JavaScript的解决方案,因为这里讨论:

How do I get the current date in JavaScript?

+0

确保'会话'在每个请求中都存在(非空)吗? – 2014-07-31 18:26:01

+0

实际上,lastAccessTime会产生前一个请求的时间。这可能是当前时间的几分钟。 – 2015-07-06 17:03:37

6

或者你可以使用Omnifaces做到这一点。我很惊讶BalusC没有告诉你这个解决方案(我认为他是一个伟大的Omnifaces贡献者)。也许这是因为使用Omnifaces只是为了在页面中显示一个简单的日期可能对某些人来说太过矫枉过正。

无论如何,如果您的项目已经使用Omnifaces,那么默认情况下有2个托管bean被暴露,特别是您可能会发现一个托管的bean。根据tag documentation的规定,一旦Omnifaces添加到您的项目中,您可以使用#{now}托管bean。

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

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

我猜#{now}管理bean可以在更多的情况下使用,而且很可能也是你们的。

如果你的项目还没有使用Omnifaces,我建议你看看他们的规范,看看它对你有多大的帮助。例如,我正在使用他们的validateOrder标记来确保两个日期已正确排序。

+1

OmniFaces目前还不存在,我发布了答案:) – BalusC 2012-11-09 14:26:39

+0

神秘解决! ;)...我不知道Omnifaces是那么年轻。无论如何,这是一项伟大的工作! – jpramondon 2012-11-09 14:41:56

+0

'我认为他是一个伟大的Omnifaces贡献者'。 BalusC创作了OmniFaces。这是他的宝贝。 – 2013-08-12 20:06:48

0

您可以使用PrimeFaces提供的标签。

<p:clock pattern="HH:mm:ss dd-MM-yyyy"/>