JSF转换器属性

Jur*_*ert 5 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>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 6

遗憾的是,这是不可能的faces-config.xml.<property>您正在尝试的声明在运行时期间不会使用.

如果你想要的只是在一个地方控制模式,那么你最好的办法是创建一个自定义转换器.出于这个特殊目的,它并不难.只需DateTimeConverter在施工期间扩展并设置图案.这是一个基本的例子:

public MyDateTimeConverter extends DateTimeConverter() {
    public MyDateTimeConverter() {
        setPattern("yyyy-MM-dd HH:mm:ss");
    }
}
Run Code Online (Sandbox Code Playgroud)

您当然可以从其他地方获取模式,例如类路径中的属性文件或xml文件.

注册此转换器如下:

<converter>
    <converter-for-class>java.util.Date</converter-for-class>
    <converter-class>com.example.MyDateTimeConverter</converter-class>
</converter>
Run Code Online (Sandbox Code Playgroud)

那应该是它.不需要f:converterUIOutput#setConverterId().