2012-02-07 7 views
36

Est-il possible d'afficher la date actuelle (aujourd'hui) dans JSF sans utiliser de bean backing?Afficher la date actuelle sur JSF Page

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> 

Répondre

82

Vous pouvez enregistrer une instance de java.util.Date comme une demande scope haricot 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 #{currentDate} sans la nécessité d'un soutien personnalisé de classe de haricots.


Update: la bibliothèque d'utilitaires JSF OmniFaces a un tel haricot already registered comme #{now}. Donc, si vous utilisez déjà OmniFaces, vous pouvez simplement l'utiliser directement.

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

Merci monsieur, encore une fois vous m'a sauvé :) – Namita

+50

Je veux un mode de filtre google pour "répondu par BalusC". Cela me ferait gagner beaucoup de temps. – SJuan76

+3

Heureusement mon surnom est assez unique au monde (délibérément décidé il y a très longtemps), alors ajoutez simplement "balusc" comme mot-clé de recherche supplémentaire :) – BalusC

30

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

... retourne la dernière fois que le client a envoyé une demande associée à cette session , comme le nombre de millisecondes depuis minuit le 1er Janvier, 1970 GMT, et marqué au moment où la le conteneur a reçu la demande.

Vous pouvez utiliser le code suivant dans votre Facelet:

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

Ce sera le temps du serveur et peut différer de temps du client par rapport aux différents fuseaux horaires.

Mais vous pouvez aussi utiliser une solution javascript, comme discuté ici:

How do I get the current date in JavaScript?

+0

Est-ce que 'session' est garanti pour exister (être non nul) dans chaque requête? –

+0

En fait, lastAccessTime donne l'heure de la requête précédente. Cela peut prendre quelques minutes de moins que l'heure actuelle. –

6

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

De toute façon, si votre projet utilise déjà Omnifaces, il y a 2 beans gérés exposés par défaut et un en particulier que vous pouvez trouver utile. Selon les spécifications tag documentation, une fois Omnifaces ajouté à votre projet, vous pouvez utiliser le bean géré #{now}.

Par exemple, pour définir une date maximum de 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 de nombreuses situations plus, 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 deux dates sont correctement commandées.

+1

OmniFaces n'existait pas encore au moment où j'ai posté la réponse :) – BalusC

+0

Mystery resolved! ;) ... Je ne savais pas Omnifaces était si jeune. C'est un super travail quand même! – jpramondon

+0

'Je pense qu'il est un grand contributeur d'Omnifaces'. BalusC a créé OmniFaces. C'est son bébé. –

0

Vous pouvez utiliser l'étiquette fournie par PrimeFaces.

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