选择项目内的格式日期

时间:2011-04-13 08:08:40

标签: java jsf jsf-2 primefaces

有没有办法格式化要在选择项目中显示的日期对象?

这是我的例子:

<h:selectOneMenu 
    label="Period" 
    value="#{myBean.periodStartEndList}"
    id="periodStartEnd" 
    converter="genericConverter">

    <f:selectItem itemLabel="Choose one .." noSelectionOption="true" />

    <f:selectItems 
        value="#{myBean.periodStartEndList}" 
        var="periodStartEnd"
        itemValue="#{periodStartEnd}" 
        itemLabel="#{periodStartEnd.map['dateStart']} -- #{periodStartEnd.map['dateEnd']}" />
</h:selectOneMenu>

组合/选择显示这些:

Sun May 01 14:57:21 WIT 2011 -- Thu May 05 14:57:21 WIT 2011
Fri May 06 14:57:21 WIT 2011 -- Tue May 10 14:57:21 WIT 2011

我想要一些更简单的东西:

01-05-2011 -- 05-05-2011
06-05-2011 -- 10-05-2011

我想知道如何实现这个目标?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以创建用于转换的EL功能并使用它。检查http://www.javabeat.net/tips/4-expression-language-in-jsp-20.htmlhttp://wiki.apache.org/myfaces/Parameters_In_EL_Functions。 免责声明:我从未使用它,也不知道它是否有效。

答案 1 :(得分:1)

您需要使用日期格式化程序。 AFAIK #{periodStartEnd.map['dateStart']}会在toString()调用中结束,假设这会返回Date个对象。

我不确定JSF 2.0中的Java EL是否已内置函数参数,但如果没有,则可以使用JBoss EL(Java EL扩展)。有了它,您可以提供格式化程序bean并使用类似#{formatter.format(periodStartEnd.map['dateStart'], 'dd-MM-yyyy')}

的内容

然后format将从格式字符串中创建SimpleDateFormat并将格式化的日期作为字符串返回。

您还可以传入区域设置以提供本地化格式。

第三种替代方法是将格式化的字符串直接存储在periodStartEnd中并访问它们。

答案 2 :(得分:0)

您可以使用f:convertDateTime并指定模式。

答案 3 :(得分:0)

您可以在bean中使用转换器方法,如:

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

并且,在f:selectItems:

中的xhtml页面中
<f:selectItems 
    value="#{myBean.periodStartEndList}" 
    var="periodStartEnd"
    itemValue="#{periodStartEnd}" 
    itemLabel="#{myBean.formatDate(periodStartEnd.map['dateStart'],'dd-MM-yyyy')} -- #{myBean.formatDate(periodStartEnd.map['dateEnd'],'dd-MM-yyyy')}" />