当我改变f:convertDateTime的时区时,这不会改变。

`<p:dataTable id="tabla2" value="#{bb.dataTable}" var="trm" resizableColumns="true"
    style="width : 1400px" editable="true" editMode="cell"
    rowStyleClass="#{styleController.daColoresParaEstadoTramos(trm, bb.fechaInicio)}"><p:column>
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{trm.tramo.horaDespeguePrevista}">
                    <f:convertDateTime pattern="HH:mm" timeZone="#{bb.zonaH}" />
                </h:outputText>
            </f:facet>
            <f:facet name="input">
                <p:inputMask value="#{trm.tramo.horaDespeguePrevista}" mask="99:99" >
                    <f:convertDateTime pattern="HH:mm" timeZone="#{bb.zona}" />
                </p:inputMask>
            </f:facet>
        </p:cellEditor>
    </p:column></p:dataTable>`

区域是元素java.util.TimeZone。我用PrimeFaces3.5

最佳答案

我刚刚在我的应用程序上解决了一个类似的问题。问题在于jsf生命周期。像你一样,我收集了一组对象,并使用f:convertDateTime为每个对象指定了日期,使用时区值(我显示了世界各地的预订情况)。
在getter中为我的预订列表设置一个断点,在ConvertDateTimeHandler中设置另一个断点,我可以看到jsf正在尝试在我从backing bean获得预订之前转换日期。
我使用的是ui:repeat,通过从jstl切换到使用c:forEach可以解决这个问题。
如果不需要primefaces数据表,则可以执行类似的操作。否则,最好使用一个临时getter,它返回一个已经为所讨论的时区格式化的日期字符串。
证明这一点的一个快速方法是获取集合中的第一个对象,并将其与h:outputText一起放入f:convertDateTime中。如果转换正确,请尝试使用datatable的替代方法。

09-25 18:04