web-dev-qa-db-fra.com

Afficher la date actuelle sur la page JSF

Est-il possible d’afficher la date du jour (aujourd’hui) dans JSF sans passer par un bean de sauvegarde?

J'ai l'extrait de code suivant, mais cela n'a pas fonctionné. 

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

ou

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

Vous pouvez enregistrer une instance de Java.util.Date en tant que bean de champ d'application dans 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 cette façon, il est disponible en tant que #{currentDate} sans nécessiter de classe de bean de sauvegarde personnalisée.


Update: la bibliothèque d’utilitaires JSF OmniFaces a un tel bean déjà enregistré sous la forme #{now}. Donc, si vous utilisez déjà OmniFaces, vous pouvez simplement vous en servir directement.

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

Dans JSF, vous pouvez utiliser l'objet EL implicite session qui donne accès au HttpSession actuel. Le HttpSession#getLastAccessedTime temps ...

... renvoie la dernière fois que le client a envoyé une demande associée à cela session, exprimée en millisecondes depuis le 1er janvier 1970 à minuit. GMT, et marqué par le moment où le conteneur a reçu la demande.

Vous pouvez donc utiliser l'extrait de code suivant dans votre facelet:

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

Il s’agit de l’heure du serveur et peut différer de l’heure du client en ce qui concerne les différents fuseaux horaires.

Mais vous pouvez également utiliser une solution javascript, comme indiqué ici:

Comment puis-je obtenir la date actuelle en JavaScript?

31
Matt Handy

Ou vous pouvez le faire en utilisant Omnifaces. Je suis surpris que BalusC ne vous ait pas parlé de cette solution (je pense que c'est un excellent contributeur d'Omnifaces). Peut-être est-ce dû au fait qu'utiliser Omnifaces simplement pour afficher une date simple dans une page peut être une surcharge pour certains.

Quoi qu'il en soit, si votre projet utilise déjà Omnifaces , il existe 2 beans gérés exposés par défaut et un en particulier que vous pouvez trouver utile. Selon la documentation tag specifie, une fois que Omnifaces est ajouté à votre projet, vous pouvez utiliser le bean géré #{now}.

Par exemple, pour définir la date maximale d'un calendrier Primefaces, je viens d'écrire ce qui suit: 

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

Je suppose que le bean géré #{now} peut être utilisé dans bien d'autres situations, et probablement aussi le vôtre.

Si votre projet n'utilise pas encore Omnifaces, je vous suggère de regarder leurs spécifications et de voir à quel point cela pourrait vous être utile… .. Par exemple, j'utilise leur balise validateOrder pour m'assurer que les deux dates sont bien ordonnées.

7
jpramondon

Vous pouvez utiliser la balise fournie par PrimeFaces.

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