2011-04-13 65 views
5

有没有一种方法来格式化日期对象显示在选择项目?格式日期内选择项目

这里是我的例子:

<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 

我不知道如何做到这一点?

谢谢!

回答

3

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

+0

+1的免责声明。我认为对于需要它的SO有很多答案。 – 2011-04-13 09:43:17

+1

另一个例子在这里:http://stackoverflow.com/questions/2378826/facelets-and-jstl-converting-a-date-to-a-string-for-use-in-a-field/2381443#2381443 – BalusC 2011-04-13 11:31:05

+0

@阿迪:你好..感谢你的建议,看着它,我认为它会工作得很好。但我很好奇使自己的EL函数在使用函数来设置日期的简单应用程序管理bean上的优势吗? – bertie 2011-04-13 15:20:32

1

你需要使用日期格式化程序。假设返回Date对象,AFAIK #{periodStartEnd.map['dateStart']}最终将在toString()呼叫中结束。

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

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

您也可以传入语言环境以提供本地化格式。

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

0

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

+0

那太棒了。你能举个例子吗?我在使用h:outputText时试过了,但我不知道如何为上面的情况编写它。 – bertie 2011-04-13 09:18:52

+0

难道你不能像在'outputText'中那样把它放在'selectOneMenu'中吗?如果您选择的项目是日期,并且您将您的价值绑定到日期,那么它应该有效。 – wjans 2011-04-13 09:30:50

+0

仅在项目值上运行,而不在项目标签上运行。此外,他已经有了一个“genericConverter”值。 – BalusC 2011-04-13 11:32:10

0

你可以在你的bean使用转换器的方法,如:

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

而且,在你的XHTML页面内F:selectItems的:

<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')}" />