在JSF页面上显示当前日期

Nam*_*ita 42 jsf-2

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

我有以下代码片段,但它没有成功.

<div class="leftSide">Today's date #{currentDate}</div>
Run Code Online (Sandbox Code Playgroud)

要么

<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>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 94

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

<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>
Run Code Online (Sandbox Code Playgroud)

这样就可以#{currentDate}在不需要自定义支持bean类的情况下使用它.


更新:JSF的工具库OmniFaces有这样一个bean 已注册#{now}.因此,如果您恰好使用OmniFaces,您可以直接使用它.

<h:outputText value="#{now}">
    <f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)


Mat*_*ndy 31

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

...返回客户端最后一次发送与此会话关联的请求,作为格林威治标准时间1970年1月1日午夜以来的毫秒数,并标记为容器收到请求的时间.

因此,您可以在facelet中使用以下代码段:

<h:outputText value="#{session.lastAccessedTime}">
      <f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

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

但您也可以使用javascript解决方案,如下所述:

如何在JavaScript中获取当前日期?


小智 7

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

无论如何,如果你的项目已经使用了Omnifaces,那么默认情况下会暴露出2个托管bean,特别是你可以找到一个托管bean.根据标签文档指定,一旦Omnifaces添加到您的项目中,您就可以使用#{now}托管bean.

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

    <p:calendar id="myCalendar" pattern="dd/MM/yyyy" 
                value="#{mybean.myDate}" maxdate="#{now}"/>
Run Code Online (Sandbox Code Playgroud)

我想#{now}托管bean可以在更多情况下使用,也可能是你的.

如果您的项目尚未使用Omnifaces,我建议您查看他们的规范,看看它对您有多大帮助.例如,我正在使用他们的validateOrder标签来确保正确订购两个日期.

  • 在我发布答案的那一刻,OmniFaces 还不存在:) (2认同)