是否可以在不使用支持bean的情况下在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>
答案 0 :(得分:92)
您可以在java.util.Date
中将faces-config.xml
的实例注册为请求范围的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的bean already registered与#{now}
一样。因此,如果您恰好使用OmniFaces,您可以直接使用它。
<h:outputText value="#{now}">
<f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>
答案 1 :(得分:31)
在JSF中,您可以使用隐式EL对象session
来提供对当前HttpSession的访问。 HttpSession#getLastAccessedTime
时间......
...返回客户端上次发送与此关联的请求的时间 会话,自1970年1月1日午夜以来的毫秒数 GMT,并以容器收到请求的时间为标记。
因此,您可以在facelet中使用以下代码段:
<h:outputText value="#{session.lastAccessedTime}">
<f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>
这将是服务器时间,可能与不同时区的客户端时间不同。
但您也可以使用javascript解决方案,如下所述:
答案 2 :(得分:7)
或者你可以使用Omnifaces来做到这一点。我很惊讶BalusC没有告诉你这个解决方案(我认为他是一个伟大的Omnifaces贡献者)。也许是因为使用Omnifaces只是为了在页面中显示一个简单的日期可能对某些人来说太过分了。
无论如何,如果您的项目已经使用Omnifaces,则默认情况下会公开2个托管bean,特别是您可能会发现其中一个。根据{{3}}指定,一旦Omnifaces添加到您的项目中,您就可以使用#{now}
托管bean。
例如,要设置Primefaces日历的最大日期,我只写了以下内容:
<p:calendar id="myCalendar" pattern="dd/MM/yyyy"
value="#{mybean.myDate}" maxdate="#{now}"/>
我想#{now}
托管bean可以在更多情况下使用,也可能在你的情况下使用。
如果您的项目尚未使用Omnifaces,我建议您查看他们的规范,看看它对您有多大帮助。
例如,我正在使用他们的validateOrder
标记来确保正确排序两个日期。