簡體   English   中英

更新timeZone f:convertDateTime

[英]Update timeZone f:convertDateTime

當我更改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

我剛剛在我的應用上解決了類似的問題。 問題在於JSF生命周期。 和你一樣,我正在使用一個對象的集合,並使用f:convertDateTime在每個對象上使用時區值(我正在顯示世界各地的預訂)。

在getter中為我的預訂列表和另一個在ConvertDateTimeHandler設置一個斷點我可以看到JSF在我從支持bean獲得預訂之前轉換日期。

我正在使用ui:repeat並且能夠通過從JSTL切換到使用c:forEach來解決問題。

如果您不必擁有Primefaces數據表,您可以做類似的事情。 否則,你可能最好使用一個瞬態getter,它返回一個已經為相關時區格式化的日期字符串。

證明這一點的一種快速方法是獲取集合中的第一個對象,並將其與f:convertDateTime一起放入h:outputText 如果它正確轉換,那么嘗試替代datatable。

使用<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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM