2012-09-26 23 views
3

爲什麼我的List<Date>沒有被轉換? <p:selectOneMenu>項目模式看起來像 Thu Mar 01 00:00:00 BRT 2012而不是所需的「MM/yyyy」。爲什麼f:convertDateTime不能轉換p:selectOneMenu的標籤?

<p:selectOneMenu value="#{report003.selectedMes}"> 
    <p:ajax update="pesquisaThomas" listener="#{report003.loadPesquisa()}" /> 
    <f:selectItem itemLabel="[Todos]" itemValue="" /> 
    <f:convertDateTime pattern="MM/yyyy" /> 
    <f:selectItems value="#{report003.pesquisaMeses}" /> 
</p:selectOneMenu> 
+0

請編輯和改善你的問題。你忘了闡述「不起作用」。你期望什麼?究竟發生了什麼?它沒有顯示標籤(!)的方式嗎?還是它產生了轉換或驗證錯誤? – BalusC

+0

好的。對不起BalusC。編輯。 – MBarni

回答

4

轉換適用於商品只,而不是該項目標籤。標籤只是使用默認的Date#toString()模式呈現。

您最好的選擇是要麼創建List<SelectItem>代替List<Date>其中將轉換爲商品標籤自己,

List<Date> availableDates = ...; 
List<SelectItem> selectItems = ...; 
SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy"); 

for (Date availableDate : availableDates) { 
    selectItems.add(new SelectItem(availableDate, sdf.format(availableDate))); 
} 

使用<f:selectItems var>與在itemValue EL函數。例如,OmniFaces of:formatDate()(或homegrow之一)。

<f:selectItems value="#{bean.availableDates}" var="date" 
    itemValue="#{date}" itemLabel="#{of:formatDate(date, 'MM/yyyy')}" /> 

這個問題是不是特定於<p:selectOneMenu>的方式,你會使用標準<h:selectOneMenu>時有完全一樣的問題。

0

試試這個:

託管bean

private SimpleDateFormat sdf; 
(...) 

@PostConstruct 
public void init(){ 
    sdf = new SimpleDateFormat("MM/yyyy"); 
} 

public SimpleDateFormat getSdf(){ 
    return sdf; 
} 

public void setSdf(SimpleDateFormat sdf){ 
    this.sdf = sdf; 
} 

XHTML

<p:selectOneMenu value="#{report003.selectedMes}"> 
    <p:ajax update="pesquisaThomas" listener="#{report003.loadPesquisa()}" /> 
    <f:selectItem itemLabel="[Todos]" itemValue="" /> 
    <f:selectItems value="#{report003.pesquisaMeses}" 
        var="mes" itemValue="#{mes}" 
        itemLabel="#{myMB.sdf.format(mes)}" /> 

相關問題