JSF转换器属性

7

我正在尝试在faces-config中注册不同的转换器实例,使用标准转换器类,将不同的参数传递给它。

下面的代码注册了两个DateTimeConverter,第一个用于包括时间的日期,第二个用于仅时间。但是,模式属性从未被设置。这可行吗?

<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>

不是的。请编辑您的问题,取消选中“社区维基”复选框并保存。社区维基旨在仅用于主观问题/讨论。您的问题远非主观。这只是一个技术问题/问题。 - BalusC
真的,不知道它是什么。但是在编辑页面中没有复选框可以禁用它 :( - Jurgen Hannaert
1
一旦勾选,社区维基就无法取消勾选。 - Bill the Lizard
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:converter或者UIOutput#setConverterId()


谢谢您的解释。但是 faces-config.xml 中这些属性的用途是什么?(property 标签是 xsd 的一部分)。 - Jurgen Hannaert
@JurgenHannaert,看一下xsd,它说:“属性”和“属性”元素旨在允许组件开发人员更完整地向工具和用户描述其组件。这些元素没有必需的运行时语义。 - Vsevolod Golovanov
确实,例如[ctrl+space]自动完成工具提示/描述。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接