2014-02-23 62 views
1

我的下一个Java模型豆(其中不仅包含以毫秒为单位的日期也是一个时区)JSF 2:F:convertDateTime内丰富:dataTable的

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的唯一方法是创建一个自定义日期/时间转换器?

谢谢。

+0

您可以在支持bean与参数_device_基于所属时区的返回日期创建功能。在'h:outputText'中使用这个函数。 –

+0

谢谢你的解决方案! – yaskovdev

回答

1

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

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

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