【问题标题】:How to convert a Date in a dynamically added input field (JSF)如何在动态添加的输入字段 (JSF) 中转换日期
【发布时间】:2014-04-15 11:11:41
【问题描述】:

在我的应用程序中,我想在 <input> 字段中输入一个日期,该字段是为 JSF 页面以编程方式创建的。

输入字段的创建如下所示:

// Input
String jsfValue = String.format("#{%s.item.%s}", getELClassname(), property.getKey());
ValueExpression valueExpression = JSFUtils.createValueExpression(jsfValue, property.getValue());

HtmlInputText input = (HtmlInputText) app.createComponent(HtmlInputText.COMPONENT_TYPE);
input.setId(property.getKey());
input.setValueExpression("value", valueExpression);

propertyjava.util.Date 的一个实例,<input> 字段只是一个 HtmlInputText 组件,没有分配任何转换器。

<input>标签被渲染时,可以看到下面的日期值:

Tue Mar 11 18:31:20 CET 2014

如果我知道要保存表单,则 JSF 页面会抱怨日期格式,因为它无法将输入值转换为 java.util.Date

谁能告诉我如何以编程方式为HtmlInputText 组件创建转换器?

当我在我的应用程序中使用MyFaces 时,转换是自动完成的,因为我以前从未遇到过这个问题。

【问题讨论】:

    标签: date jakarta-ee jsf-2 converter html-input


    【解决方案1】:
    DateTimeConverter converter = (DateTimeConverter) application.createConverter(Date.class);
    converter.setPattern(somePattern);
    input.setConverter(converter);
    

    【讨论】:

    • 感谢您的回答。但是应该使用 createConverter("javax.faces.DateTime") 而不是 createConverter(Date.class)。
    【解决方案2】:

    诀窍是将DateTimeConverter 应用于动态创建的输入字段,以便JSF 知道如何将给定的字符串转换为正确的java.util.Date

    这是一个代码示例:

    HtmlInputText input = (HtmlInputText) app.createComponent(HtmlInputText.COMPONENT_TYPE);
    ...
    DateTimeConverter converter = (DateTimeConverter) app.createConverter(DateTimeConverter.CONVERTER_ID);
    converter.setPattern("mm/dd/yyyy");
    input.setConverter(converter);
    

    如果需要其他日期格式,可以查看维基百科:Date format by country

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2021-04-30
      • 2014-01-03
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多