Отобразить текущую дату на странице JSF

Можно ли отображать текущую дату (сегодняшнюю) в JSF без использования поддержки bean?

У меня есть следующий фрагмент кода, но он не сработал.

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

или

<f:facet name="header">  
<h:outputText value="Today date" />  
</f:facet>
<h:outputText value="#currentDate">
    <f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>

Ответ 1

Вы можете зарегистрировать экземпляр java.util.Date в качестве области с запросом bean в 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>

Таким образом, он доступен как #{currentDate} без необходимости создания настраиваемого класса bean.


Обновить: библиотека утилиты JSF OmniFaces имеет такой bean уже зарегистрирован как #{now}. Поэтому, если вы уже используете OmniFaces, вы можете просто использовать его напрямую.

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

Ответ 2

В JSF вы можете использовать неявный EL-объект session, который обеспечивает доступ к текущему HttpSession. Время HttpSession#getLastAccessedTime...

... возвращает последний раз, когда клиент отправил запрос, связанный с этим сессия, как количество миллисекунд с полуночи 1 января 1970 г. GMT и отмечен временем, когда контейнер получил запрос.

Итак, вы можете использовать следующий фрагмент кода в своем лице:

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

Это будет время сервера и может отличаться от времени клиента в отношении разных часовых поясов.

Но вы также можете использовать решение javascript, как описано здесь:

Как получить текущую дату в JavaScript?

Ответ 3

Или вы можете сделать это с помощью Omnifaces. Я удивлен, что BalusC не рассказал вам об этом решении (я думаю, что он отличный вкладчик Omnifaces). Может быть, потому, что использование Omnifaces просто для отображения простой даты на странице может быть избыточным для некоторых.

В любом случае, если ваш проект уже использует Omnifaces, есть 2 управляемых beans, выставленных по умолчанию, и один, в частности, который вы можете найти удобно. В соответствии с документация тегов указывает, как только Omnifaces добавляется в ваш проект, вы можете использовать #{now} bean.

Например, чтобы установить максимальную дату календаря Primefaces, я просто написал следующее:

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

Я полагаю, что #{now} bean может использоваться во многих других ситуациях и, возможно, и для вас.

Если ваш проект еще не использует Omnifaces, я предлагаю вам взглянуть на их спецификацию и посмотреть, насколько это полезно для вас. Например, я использую тэг validateOrder, чтобы убедиться, что две даты правильно упорядочены.

Ответ 4

Вы можете использовать тег, который предоставляет PrimeFaces.

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