【问题标题】:JSF converter propertyJSF 转换器属性
【发布时间】:2011-01-06 08:52:06
【问题描述】:

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

【问题讨论】:

  • 确实没有。编辑您的问题,取消选中“社区 Wiki”复选框并保存。 Community Wiki 仅用于主观问题/讨论。你的问题远非主观。这只是一个技术问题/问题。
  • 不错,不知道是什么。但是编辑页面中没有复选框可以禁用它:(
  • 一旦勾选,社区wiki就不能取消勾选。

标签: jsf properties converter


【解决方案1】:

很遗憾,这无法通过faces-config.xml 实现。您正在尝试的 &lt;property&gt; 声明在运行时未使用。

如果您只想在一个地方控制模式,那么最好的办法就是创建一个自定义转换器。对于这个特定的目的,它并不难。只需扩展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()

【讨论】:

  • 感谢您的解释。但是 faces-config.xml 中的这些属性有什么用呢? (属性标签是 xsd 的一部分)。
  • @JurgenHannaert,看看xsd,它说:“attribute”和“property”元素旨在让组件开发人员更完整地向工具和用户描述他们的组件。这些元素没有必需的运行时语义。
  • 确实如此,例如 [ctrl+space] 自动完成工具提示/描述。
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 2011-01-23
  • 2012-12-26
  • 2017-01-13
  • 2013-06-21
  • 2011-08-23
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多