jsf转换器p:日历日期

时间:2012-01-27 00:59:34

标签: jsf date calendar primefaces converter

“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.fechajava.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");
            ...
        }
    ...
    }

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

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

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

所以,我已经检查过,如果我用ID声明我的转换器:

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

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

<f:converter converterId="fechaDateConverter" />

有效。

所以任何人都知道哪个是p:calendar的Java类?这样我就可以为该类声明我的转换器,而不是使用converterId?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

  

所以任何人都知道哪个是p:calendar的Java类?

似乎没有一个。

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

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

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

答案 1 :(得分:0)

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

这样做的缺点是你需要重复每个p:calendar ...