Frage

Ich habe eine <h:selectOneMenu> die <f:selectItems> mit CategoryHistory Objekte geladen darin. Ich zeige nur das Date date Feld als itemLabel. Das funktioniert, aber ich möchte das Datum zu formatieren: Ich habe einen Konverter, der javax.faces.convert.DateTimeConverter und ändern Sie die Felder in den Konstruktor erstreckt. Aber meine Daten zeigen nur in Standardformat: (

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");
 }

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>

Es ist auch nicht arbeiten, wenn ich versuche:

<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 Hat ein Datum das Datum und die Lange id + ...

Danke

War es hilfreich?

Lösung

Leider ist der JSF-Wandler gilt nur am Eingang Wert , nicht am Eingang Label .

Sie müssen diese anderen Wege zu lösen. Z.B. die ein Getter verwendet SimpleDateFormat zu formatieren, die Datum. Oder wenn Ihre Umgebung unterstützt EL 2.2, einfach invoke die Konverter Methode direkt (Sie haben es als Managed Bean bereits):

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

Wenn Sie geschehen, JSF-Utility-Bibliothek benutzen OmniFaces , dann können Sie auch die of:formatDate() Funktion. Z.

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

Andere Tipps

Sie können eine Konverter-Methode in Ihrem Bean verwenden, wie:

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

Und in Ihrer xhtml Seite innen f: selectItems:

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

Beispiel

  

xhtml

<h:selectOneMenu value="#{tbMonitoreoController.fechaMonitoreo}">
<f:selectItems value="#{tbMonitoreoController.fechasMonitoreo}" />
  

Methode in tbMonitoreoController

public SelectItem[] getFechasMonitoreo(){
    Collection<Date> entities = getEjbFacade().getFechasMonitoreo();
    return JsfUtil.getSelectItemsFechasMonitoreo(entities, true);
}

public static SelectItem[] getSelectItemsFechasMonitoreo(Collection<Date> listDate, boolean selectOne) {
    int size = selectOne ? (listDate.size() + 1) : listDate.size();
    SelectItem[] items = new SelectItem[size];
    int i = 0;

    if (selectOne) {
        items[0] = new SelectItem(null, "---");
        i++;
    }
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    for (Date x : listDate) {
        items[i++] = new SelectItem(x, simpleDateFormat.format(x));
    }
    return items;
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top