selectOneMenu with Date使用不同的值和标签模式

时间:2012-04-24 00:11:52

标签: jsf date converter selectonemenu

我想建立一个工作日选择菜单。工作日初始化为1970年的第一个工作日。

转换器将值转换为日期。但是我想使用java日期模式“EEEE”来显示工作日的全文。

<h:selectOneMenu id="day" label="#{msg.day_u}" required="true" value="#{date}">
    <f:convertDateTime pattern="dd/mm/yyyy"/>
    <f:selectItem itemValue="05/01/1970" itemLabel="display Monday using pattern"/>
    <!-- other weekdays -->
</h:selectOneMenu>

这不起作用。现在我正在使用自定义EL函数来检索label属性中的本地化工作日。

有没有办法将它与日期模式一起使用?

1 个答案:

答案 0 :(得分:2)

转换器确实不会应用于选项标签。它仅适用于选项值。它应该可以正常使用EL功能。假设您有List<Date>个可用项目,Date作为所选项目,那么应该这样做:

<f:selectItems value="#{bean.weekdays}" var="day" 
    itemValue="#{day}" itemLabel="#{util:formatDate(day, 'EEEEE')}" />

其中formatDate()看起来像这样

public static String formatDate(Date date, String pattern) {
    if (date == null) {
        return null;
    }

    if (pattern == null) {
        throw new NullPointerException("pattern");
    }

    Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
    return new SimpleDateFormat(pattern, locale).format(date);
}

OmniFaces顺便提一下exactly这个功能。