3

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

`<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>`

zone 是一个元素java.util.TimeZone。我使用primefaces 3.5

4

2 回答 2

1

我刚刚在我的应用程序上解决了类似的问题。问题在于 JSF 生命周期。像你一样,我正在收集一组对象,并f:convertDateTime在每个对象上使用一个日期,使用时区值(我正在显示世界各地的预订)。

在我的预订列表的 getter 中设置一个断点,在ConvertDateTimeHandler我可以看到 JSF 正在尝试转换日期之前,我什至从支持 bean 获得预订。

我正在使用 a并且能够通过从 JSTLui:repeat切换到使用来解决问题。c:forEach

如果您不必拥有 Primefaces 数据表,您也许可以做类似的事情。否则,您最好使用一个瞬态 getter,它返回已针对相关时区格式化的日期字符串。

证明这一点的一种快速方法是获取集合中的第一个对象并将其h:outputTextf:convertDateTime. 如果它转换正确然后尝试替代数据表。

于 2014-05-08T10:11:48.013 回答
0

用于<f:ajax/>更改时间。在您的 xhtml 上添加以下代码。

        <p>
            <h:selectOneMenu value="#{bb.zone}">
                <f:selectItems value="#{bb.timeZones}"/>
                <f:ajax execute="@this" listener="#{bb.changeZone()}" render="hour"/>
            </h:selectOneMenu>
        </p>
        <p>
            <h:outputText id="hour" value="#{bb.hour}">
                <f:convertDateTime pattern="HH:mm" timeZone="#{bb.zone}" />
            </h:outputText>
        </p>

并且,在您的托管 bean 中添加以下代码

    private Date hour=new Date();
    private String zone;
    private List<String> timeZones=new ArrayList<String>();
    public Bean() {
        timeZones= Arrays.asList( TimeZone.getAvailableIDs());
    }

    public void changeZone(){
    System.out.println("Time Zone : "+ zone);
    }
于 2013-06-24T09:41:12.840 回答