java - JSF 2 : f:convertDateTime inside a rich:dataTable

标签 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 标记时,device 变量尚不可用。

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

谢谢。

最佳答案

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

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

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

关于java - JSF 2 : f:convertDateTime inside a rich:dataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966417/

相关文章:

Java Ant 任务使用错误的解释器(java.exe 而不是 javaw.exe)

java - 如何为所有用户更新页面

java - RichFaces 3.3 : Calling actionListener on window. 加载

jsf-2 - 是否可以在一个 Web 应用程序中组合 Primefaces 和 Richfaces?

java - 使用 Richfaces ExtendedDataTable 的 ConcurrentModificationException

java - 在 try catch 后从 sql select 返回一个值

java - 如何让用户结束这个程序?

jsf - 如何编辑<rich :fileUpload> CSS?

java - Android 应用程序中出现奇怪的 NetworkOnMainThreadException?

java - JSF 1.2 : valueChangeListener event not returning newly selected value