6

我正在尝试使用传递不同参数的标准转换器类在 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>
4

1 回答 1

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:converteror UIOutput#setConverterId()

于 2010-01-18T14:47:04.847 回答