代码之家  ›  专栏  ›  技术社区  ›  Michael Bavin

使用DateTimeConverter在<f:selectItem(s)itemLabel>中设置日期格式

  •  1
  • Michael Bavin  · 技术社区  · 16 年前

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

    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>
    

    分类历史 具有日期和长id+。。。

    非常感谢。

    2 回复  |  直到 10 年前
        1
  •  4
  •   BalusC    10 年前

    不幸的是,JSF转换器只适用于输入 价值 ,不在输入上 .

    SimpleDateFormat 设置日期的格式。或者,如果您的环境支持EL 2.2,只需直接调用converter方法(您已经将其作为托管bean使用):

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

    如果您碰巧使用了JSF实用程序库 OmniFaces ,则您也可以使用其 of:formatDate() 功能。例如。:

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

    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>
    
        3
  •  0
  •   Armando    6 年前

    例子

    xhtml

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

    tbmonitorocontroller中的方法

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

    enter image description here