“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");
...
}
...
}
我没有把这个方法的代码放在这里,因为它很大。它检查条件并使用自定义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?
提前谢谢。
答案 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 ...