2012-01-27 93 views
0

哪个“p:calendar”组件被假定为绑定的Java类类型? (为了实现它的转换器)。jsf转换器p:日历日期

我认为这是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(这是我声明的转换器的类)。

所以,我检查了,如果我宣布我的转换器的ID:

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

,我把这个在p:calendar组件:

<f:converter converterId="fechaDateConverter" /> 

它的工作原理。

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

预先感谢您。

+0

为什么你需要一个转换器FO号码:日历值?它是一个简单的日期http://www.primefaces.org/showcase/ui/calendarBasic.jsf < - 看看java代码... – Daniel 2012-01-28 08:47:08

+0

我的转换器是一个简单的日期(请参阅我的问题)。但是,如果我将它声明为任何日期对象'@FacesConverter(forClass = java.util.Date.class)',它就不起作用。如果我明确声明组件为' ' – choquero70 2012-01-30 17:34:22

回答

1

因此,任何人都知道哪个是p:calendar的Java类?

这似乎没有一个。

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

从字符串到日期的转换在org.primefaces.component.calendar.CalendarRenderer

的getConvertedValue方法如果已经指定一个转换器完成(在你的电话号码:你的页面上使用的日历),这将是用于转换日期并处理可能遇到的任何错误。如果没有指定转换器,那么该方法尝试使用提供的模式解析日期(或者如果没有提供模式,它将回退到使用MM/dd/yyyy的默认值)。

0

可以使用p的属性变换器:日历指定转换器,无论是通过ID(例如转换器=“fechaDateConverter”)或由豆名称(例如转换器=“#{fechaDateConverter}”)。

这有你需要的,如果重复对于每P缺点:历...