JSF 2:f:在rich:dataTable中的convertDateTime

时间:2014-02-23 09:24:37

标签: java jsf richfaces

我有下一个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 标记时,设备变量尚不可用。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

请参阅:http://showcase.omnifaces.org/taghandlers/converter