【问题标题】:JSF 2: f:convertDateTime inside a rich:dataTableJSF 2:f:convertDateTime 在 Rich:dataTable 中
【发布时间】:2014-03-24 20:32:15
【问题描述】:

我有下一个 Java 模型 bean(它不仅包含以毫秒为单位的日期,还包含时区)

public class Device {

    private Calendar lentDate;

    // getters and setters
}

以及下一个 xhtml 页面片段

<rich:dataTable value="#{tagBean.devices}" var="device">
    <rich:column>
        <h:outputText value="#{device.lentDate.time}">
            <f:convertDateTime pattern="dd.MM.yyyy" timeZone="#{device.lentDate.timeZone}"/>
        </h:outputText>
    </rich:column>
</rich:dataTable>

但是 timeZone 属性没有获得 device.lentDate.timeZone 值。看起来是因为当 f:convertDateTime 标签被渲染时,device 变量还不可用。

是否可以在设备变量可用后强制 JSF 呈现 f:convertDateTime 标记? 或者在这种情况下为每个设备正确设置 timeZone 的唯一方法是创建一个自定义日期/时间转换器?

谢谢。

【问题讨论】:

  • 您可以使用参数device 在后备bean 中创建函数,该参数根据时区返回日期。并在h:outputText中使用这个函数。
  • 感谢您的解决方案!

标签: java jsf richfaces


【解决方案1】:

问题是在构建视图时会评估转换器的属性。这部分是因为转换器本身不是组件,而是在由 TagHandler 实现的 Facelets 中,它在父组件中设置转换器实例。请参阅JSTL in JSF2 Facelets... makes sense? 以获得非常详尽的背景说明。

您可以使用专门为此用例构建的 OmniFaces 中的 &lt;o:converter&gt; 来解决此问题。与常规转换器相反,这个转换器在渲染其父组件时会评估其属性。

见:http://showcase.omnifaces.org/taghandlers/converter

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 2012-12-09
    • 2013-02-20
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2013-11-07
    相关资源
    最近更新 更多