2012-02-07 88 views
36

¿Es posible visualizar la fecha actual (hoy) en JSF sin usar un bean de respaldo?Mostrar fecha actual en JSF Página

Tengo el siguiente fragmento de código, pero no funcionó.

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

o

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

Respuesta

82

podría registrar una instancia de java.util.Date como una petición en ámbito de frijol en 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> 

De esta manera es disponible como #{currentDate} sin la necesidad de una clase bean de respaldo personalizado.


actualización: la biblioteca de utilidades JSF OmniFaces tiene un grano tales como already registered#{now}. Entonces, si ya usa OmniFaces, puede usarlo directamente.

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

Gracias señor, otra vez me salvaste :) – Namita

+50

Quiero un modo de filtro de google para "respondido por BalusC". Me ahorraría mucho tiempo. – SJuan76

+3

Afortunadamente, mi apodo es bastante único en el mundo (decidido a propósito hace mucho tiempo), así que simplemente agregue "balusc" como palabra clave adicional de búsqueda :) – BalusC

30

En JSF podría utilizar el objeto implícito EL session que proporciona acceso a la corriente HttpSession. El tiempo de HttpSession#getLastAccessedTime ...

... devuelve la última vez que el cliente envía una petición asociada a esta sesión , como el número de milisegundos desde la media noche del 1 de enero de, 1970 GMT, y marcada por el tiempo que el contenedor recibió la solicitud.

lo que podría utilizar el siguiente fragmento de código en su facelet:

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

Esta será la hora del servidor y pueden diferir del tiempo del cliente con respecto a las diferentes zonas horarias.

Pero también se puede utilizar una solución de JavaScript, como se discute aquí:

How do I get the current date in JavaScript?

+0

¿Está garantizada la "sesión" (no será nula) en cada solicitud? –

+0

En realidad, lastAccessTime produce el tiempo de la solicitud anterior. Eso puede ser un par de minutos de la hora actual. –

6

O puede hacerlo utilizando Omnifaces. Estoy sorprendido de que BalusC no te haya contado sobre esta solución (creo que es un gran colaborador de Omnifaces). Tal vez sea porque usar Omnifaces solo para mostrar una fecha simple en una página puede ser un exceso para algunos.

De todos modos, si su proyecto ya usa Omnifaces, hay 2 beans administrados expuestos de manera predeterminada y uno en particular que puede encontrar a mano. De acuerdo con el tag documentation especifica, una vez que Omnifaces se agrega a su proyecto, puede usar el #{now} bean administrado.

Por ejemplo, para establecer la fecha máxima de un calendario Primefaces, que acabo de escribir lo siguiente:

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

supongo que el bean gestionado #{now} se puede utilizar en muchas más situaciones, y probablemente el suyo también.

Si su proyecto aún no usa Omnifaces, le sugiero que mire sus especificaciones y vea qué tan útil podría ser para usted. Por ejemplo, estoy usando su etiqueta validateOrder para asegurarme de que dos fechas estén ordenadas correctamente.

+1

OmniFaces todavía no existía en el momento en que publiqué la respuesta :) – BalusC

+0

Misterio resuelto! ;) ... No sabía Omnifaces era tan joven. ¡Es un gran trabajo de todos modos! – jpramondon

+0

'Creo que es un gran colaborador de Omnifaces'. BalusC es autor de OmniFaces. Es su bebé. –

0

Puede usar la etiqueta que proporciona PrimeFaces.

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