【问题标题】:jsf converter p:calendar datejsf 转换器 p:日历日期
【发布时间】:2012-02-20 02:43:15
【问题描述】:

“p:calendar”组件应该绑定到哪个 Java 类类型? (为了实现它的转换器)。

我以为是java.util.Date,所以我有以下内容:

<p:calendar id="fecha" value="#{catalogoController.criterios.fecha}"
            maxlength="10"
            size="10"
            locale="es"
            pattern="dd/MM/yyyy"
            navigator="true"
            showOn="button"
            showButtonPanel="true" />

catalogoController.criterios.fecha 的属性是java.util.Date

我的自定义转换器:

    @FacesConverter(forClass = java.util.Date.class)
    public class FechaDateConverter implements Converter {
    ...
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            log.info("getAsObject");
            ...
        }
    ...
    }

我没有把方法的代码放在这里,因为它很大。它检查条件并使用我从自定义属性文件(“msjsConversion”)获得的自定义面孔消息抛出 ConverterException。

但它不起作用。当我输入错误的日期(例如“01/032011”)时,我的getAsObject 方法不会被触发(我知道是因为它的第一行日志永远不会到达)。并且转换的默认消息显示为 facesmessage,而不是我从包“msjsConversion”中获得的消息。

我认为它没有被触发的原因是p:calendar 绑定到的Java 类不是java.util.Date(这是我声明转换器的类)。

因此,我检查了是否使用 ID 声明转换器:

@FacesConverter("fechaDateConverter")
public class FechaDateConverter implements Converter {

我把它放在p:calendar 组件中:

<f:converter converterId="fechaDateConverter" />

有效。

那么有人知道p:calendar 的Java 类是什么吗?这样我就可以为那个类声明我的转换器,而不是使用 converterId?

提前谢谢你。

【问题讨论】:

  • 为什么你需要一个转换器 fo p:calendar value ?这是一个简单的日期primefaces.org/showcase/ui/calendarBasic.jsf
  • 我的转换器是一个简单的日期(见我的问题)。但如果我为任何日期对象“@FacesConverter(forClass = java.util.Date.class)”声明它,它就不起作用。如果我使用 ' ' 为组件明确声明它,它只会起作用

标签: jsf date calendar primefaces converter


【解决方案1】:

那么有谁知道 p:calendar 的 Java 类是什么?

好像没有。

请注意,这个答案适用于 primefaces 1.1,我没有检查过以后的版本可能会有所不同。

String 到 Date 的转换是在 org.primefaces.component.calendar.CalendarRenderer 的 getConvertedValue 方法中完成的

如果已指定转换器(在您页面上使用的 p:calendar 中),它将用于转换日期并处理可能遇到的任何错误。如果没有指定转换器,则该方法尝试使用提供的模式解析日期(或者如果没有提供模式,它将回退到使用默认的 MM/dd/yyyy)。

【讨论】:

    【解决方案2】:

    您可以使用 p:calendar 的 converter 属性来指定转换器,无论是通过 id(例如 converter='fechaDateConverter')还是通过 bean 名称(例如 converter='#{fechaDateConverter}' )。

    如果对每个 p:calendar...,您需要重复此操作的缺点...

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多