gpt4 book ai didi

JSF convertDateTime 与数据表中的时区

转载 作者:行者123 更新时间:2023-12-03 21:23:01 25 4
gpt4 key购买 nike

尝试输出数据表中的项目列表,如下所示:

<t:dataTable value="#{mybean.list}" var="item">
<h:column>
<h:outputText value="#{item.time}">
<f:convertDateTime pattern="yyyy-MM-dd HH:mm:ssZ" timeZone="#{item.timeZone}" />
</h:outputText>
</h:column>
</t:dataTable>

它总是以格林威治标准时间格式化时间。如果我使用字符串常量或不是数据表变量的 bean(如“#{mybean.timeZone}”),它会按预期工作。

最佳答案

不幸的是,这就是 <f:xxx> 的性质。标签。当要构建 View 时,将在实例化转换器的位置构建标记的单个实例。它的所有属性只被读取和设置一次。在构建 View 的那一刻,#{item}解析为 null (它仅在渲染 View 期间可用),所以 timeZone属性将为 null然后默认为UTC。当要呈现 View 时,表的每一行都重复使用相同的转换器实例。

有几种方法可以解决这个问题。我可以想到自定义转换器或 EL 函数。我认为自定义转换器毕竟是最好的,因为它也可以在输入组件中重复使用。以下启动示例应该适合您(为简洁起见省略了空检查):

@FacesConverter("extendedDateTimeConverter")
public class ExtendedDateTimeConverter extends DateTimeConverter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
setPattern((String) component.getAttributes().get("pattern"));
setTimeZone(TimeZone.getTimeZone((String) component.getAttributes().get("timeZone")));
return super.getAsObject(context, component, value);
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
setPattern((String) component.getAttributes().get("pattern"));
setTimeZone(TimeZone.getTimeZone((String) component.getAttributes().get("timeZone")));
return super.getAsString(context, component, value);
}

}

可以用作

<h:outputText value="#{item.time}">
<f:converter converterId="extendedDateTimeConverter" />
<f:attribute name="pattern" value="yyyy-MM-dd HH:mm:ssZ" />
<f:attribute name="timeZone" value="#{item.timeZone}" />
</h:outputText>

这样,每次调用转换器时都会解析时区,而不是在其构建期间。

更新 : OmniFaces <o:converter> 无需自定义转换器即可解决此问题。
<h:outputText value="#{item.time}">
<o:converter converterId="javax.faces.DateTime" pattern="yyyy-MM-dd HH:mm:ssZ" timeZone="#{item.timeZone}" />
</h:outputText>

关于JSF convertDateTime 与数据表中的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com