![](/img/trans.png)
[英]f:convertDateTime displays wrong Date if timezone is provided by a bean
[英]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.