【发布时间】: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