2012-02-07 38 views
36

バッキングビーンを使用せずにJSFで現在の日付(今日)を表示できますか?JSFの現在の日付を表示するページ

次のコードスニペットがありますが、うまくいきませんでした。 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> 

答えて

82

あなたはjava.util.Dateのインスタンスを登録することができます。

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

それはカスタムバッキングBeanクラスを必要とせずに#{currentDate}として利用できるこの方法です。


更新#{now}ような豆already registeredを持ってOmniFaces JSFユーティリティライブラリ。 OmniFacesを既に使用している場合は、そのまま使用することができます。

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

もう一度私を救ってくれてありがとうございました:) – Namita

+50

"BalusCが答えました"というGoogleフィルタモードが必要です。私に多くの時間を節約できますか? – SJuan76

+3

幸いにも私のニックネームは世界でかなりユニークです(意図的に非常にずっと前に決めました)ので、追加の検索キーワードとして「balusc」を追加してください:) – BalusC

30

現在のHttpSessionへのアクセスを提供する暗黙のELオブジェクトsessionを使用することができます。 ...

HttpSession#getLastAccessedTime時間が...クライアントは、1970年1月1日0時 GMTからのミリ秒数で、この セッションに関連付けられた要求を送信し、かつ時間でマークされた最後の時間を返します。コンテナがリクエストを受け取りました。

ですから、あなたにfaceletに次のコードスニペットを使用することができます。

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

これは、サーバーの時間となり、異なるタイムゾーンに対するクライアントの時間と異なる場合があります。ここで説明したように

しかし、あなたはまた、javascriptのソリューションを使用することができます。要求はfaces-config.xmlでBeanをスコープとして

How do I get the current date in JavaScript?

+0

リクエストごとに 'session'が存在することが保証されていますか(nullでないこと)はありますか? –

+0

実際には、lastAccessTimeは直前のリクエストの時刻を返します。それは現時点から数分遅れているかもしれません。 –

6

また、Omnifacesを使用してもかまいません。私はBalusCがこの解決策についてあなたに言わなかったことに驚いています(私は彼が素晴らしいOmnifacesの貢献者だと思います)。たぶん、Omnifacesを使ってページの簡単な日付を表示するのは、一部の人にとっては過度のものかもしれないからです。

あなたのプロジェクトですでにOmnifacesが使用されている場合は、デフォルトで公開されている2つのマネージドBeanと、特に便利なものがあります。 tag documentationが指定するとおり、Omnifacesがプロジェクトに追加されると#{now}マネージドBeanを使用できます。 Primefacesカレンダーの最大の日付を設定するには、例えば

、私は次のように書いた:

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

私はおそらくあなたにも#{now}マネージドBeanは、より多くの状況で使用することができますね、と。

あなたのプロジェクトでまだOmnifacesが使用されていない場合は、その仕様を見て、それがあなたにとってどれほど役に立つかを確認することをお勧めします。 たとえば、validateOrderタグを使用して、2つの日付が正しく並べられていることを確認しています。

+1

OmniFacesはまだ私が答えを掲示した瞬間には存在しませんでした:) – BalusC

+0

謎解きました! ;)...私はOmnifacesが若いことを知らなかった。とにかくそれは素晴らしい仕事です! – jpramondon

+0

「彼は素晴らしいOmnifacesの貢献者だと思う。 BalusCはOmniFacesを作成しました。それは彼の赤ちゃんだ。 –

0

PrimeFacesが提供するタグを使用できます。

関連する問題