我正在尝试在faces-config中注册不同的转换器实例,使用传递不同参数的标准转换器类。
下面的代码注册了两个DateTimeConverters,第一个用于日期,包括时间,第二个用于时间。但是模式属性永远不会被设置。可以这样做吗?
<converter>
<converter-id>dateTimeConverter</converter-id>
<converter-class>javax.faces.convert.DateTimeConverter</converter-class>
<property>
<property-name>pattern</property-name>
<suggested-value>yyyy-MM-dd HH:mm:ss</suggested-value>
</property>
</converter>
<converter>
<converter-id>timeConverter</converter-id>
<converter-class>javax.faces.convert.DateTimeConverter</converter-class>
<property>
<property-name>pattern</property-name>
<suggested-value>HH:mm:ss</suggested-value>
</property>
</converter>
答案 0 :(得分:6)
遗憾的是,faces-config.xml
无法做到这一点。您正在尝试的<property>
声明在运行时期间不会使用。
如果你想要的只是在一个地方控制模式,那么你最好能做的就是创建一个自定义转换器。出于这个特殊目的,它并不难。只需扩展DateTimeConverter
并在构造期间设置模式。这是一个基本的例子:
public MyDateTimeConverter extends DateTimeConverter() {
public MyDateTimeConverter() {
setPattern("yyyy-MM-dd HH:mm:ss");
}
}
您当然可以从其他地方获取模式,例如类路径中的属性文件或xml文件。
按如下方式注册此转换器:
<converter>
<converter-for-class>java.util.Date</converter-for-class>
<converter-class>com.example.MyDateTimeConverter</converter-class>
</converter>
那应该是它。无需f:converter
或UIOutput#setConverterId()
。