JSF转换器属性

时间:2010-01-18 13:10:45

标签: jsf properties converter

我正在尝试在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>

1 个答案:

答案 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:converterUIOutput#setConverterId()