Отформатируйте дату в <f: selectItem (s) itemLabel>, используя DateTimeConverter - PullRequest
1 голос
/ 28 января 2010

У меня есть <h:selectOneMenu>, в котором <f:selectItems> с CategoryHistory объектами, загруженными в него. Я показываю только поле Date date как itemLabel. Это работает, но я хочу отформатировать дату: Я создал конвертер, который расширяет javax.faces.convert.DateTimeConverter и изменяет поля в конструкторе. Но мои даты отображаются только в формате по умолчанию: (

DateAndTimeConverter.java

import javax.faces.bean.ManagedBean;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "dateAndTimeconverter")
@ManagedBean
public class DateAndTimeConverter extends DateTimeConverter implements Converter {

 public DateAndTimeConverter(){  
  this.setDateStyle("short");
 }

* 1015 XHTML *

 <h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}" converter="#{dateAndTimeconverter}">       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
 </h:selectOneMenu>

Это также не работает, когда я пытаюсь:

<h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}"
    onchange="submit()" value="#{admin.categoryHistory.id}">
  <f:converter converterId="dateAndTimeconverter"/>       
  <f:selectItems value="#{admin.categoryHistories}" var="n"
     itemValue="#{n.id}" itemLabel="#{n.date}">
  </f:selectItems>
</h:selectOneMenu>

CategoryHistory Имеет дату и длинный идентификатор + ...

Спасибо

Ответы [ 2 ]

4 голосов
/ 28 января 2010

К сожалению, преобразователи JSF применяются только к входу значение , а не к входу метка .

Тебе нужно решить это другими способами. Например. геттер, который использует SimpleDateFormat для форматирования даты. Или, если ваша среда поддерживает EL 2.2, просто вызовите метод преобразователя напрямую (он уже является управляемым компонентом):

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{dateAndTimeconverter.getAsString(facesContext, component, n.date)}">

Если вы используете библиотеку утилит JSF OmniFaces , то вы также можете использовать ее функцию of:formatDate(). E.g.:

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{of:formatDate(n.date, 'd MMM yyyy')}">
2 голосов
/ 23 июня 2015

Вы можете использовать метод преобразования в вашем bean-компоненте, как:

public class Admin{
    ...
        public String formatDate(Date fecha, String pattern) {
            return (new SimpleDateFormat(pattern)).format(fecha);
        }
    ...
}

И на вашей странице xhtml внутри f: selectItems:

<f:selectItems value="#{admin.categoryHistories}" var="n"
               itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}">
</f:selectItems>
...