【问题标题】:format date inside a select item [duplicate]在选择项中格式化日期[重复]
【发布时间】:2011-08-04 12:14:08
【问题描述】:

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

这是我的例子:

<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

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

谢谢!

【问题讨论】:

    标签: java jsf jsf-2 primefaces


    【解决方案1】:

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

    【讨论】:

    • +1 表示免责声明。我认为有很多关于 SO 的答案需要它。
    • 这里的另一个例子:stackoverflow.com/questions/2378826/…
    • @Adi:你好.. 谢谢你的建议,看了之后,我认为它会很好用。但我很好奇将其作为我自己的 EL 函数,而不是创建一个简单的应用范围托管 bean,该 bean 具有格式化日期的函数?
    • wekcome..你可以在类似的场景中重用你的 EL 函数
    • @Adi:我也可以重用我的应用程序托管 bean 来进行格式化。我还可以轻松地向 jsf bean 添加更多格式化方法。
    【解决方案2】:

    您需要使用日期格式化程序。假设这将返回一个 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 中并访问它们。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 那太好了。你能举个例子吗?我在使用 h:outputText 时尝试过,但我不确定如何为我上面的情况编写它。
      • 你不能把它放在你的selectOneMenu 中,就像你对outputText 所做的那样吗?如果您选择的项目是日期并且您将值绑定到日期,它应该可以工作。
      • 这仅在项目值上运行,而不是项目标签。此外,他已经有一个关于值的“genericConverter”。
      • 确实,我的错,没有注意这个例子,忽略了一些重要的细节。认为这是在 selectOneMenu 中格式化日期的问题。抱歉在这里指错了方向。
      【解决方案4】:

      您可以在 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')}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 2013-08-02
        • 2014-05-08
        • 1970-01-01
        • 2017-02-19
        • 2013-01-19
        • 2011-07-17
        相关资源
        最近更新 更多