2010-01-28 44 views
1

我有一個<h:selectOneMenu><f:selectItems>CategoryHistory對象加載在它。我只顯示Date date字段爲itemLabel。 這樣的工作,但我想格式化日期: 我創建了一個轉換器,擴展javax.faces.convert.DateTimeConverter並更改構造函數中的字段。但我只能追溯到默認格式:(格式日期在<f:selectItem(s)itemLabel>使用DateTimeConverter

DateAndTimeConverter.java顯示

import javax.faces.bean.ManagedBean; 
import javax.faces.convert.Converter; 
import javax.faces.convert.DateTimeConverter; 
import javax.faces.convert.FacesConverter; 

@FacesConverter(value = "dateAndTimeconverter") 
@ManagedBean 
public class DateAndTimeConverter extends DateTimeConverter implements Converter { 

public DateAndTimeConverter(){ 
    this.setDateStyle("short"); 
} 

XHTML

<h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}" 
    onchange="submit()" value="#{admin.categoryHistory.id}" converter="#{dateAndTimeconverter}">  
    <f:selectItems value="#{admin.categoryHistories}" var="n" 
    itemValue="#{n.id}" itemLabel="#{n.date}"> 
    </f:selectItems> 
</h:selectOneMenu> 

它也不會當我嘗試的工作:

<h:selectOneMenu valueChangeListener="#{admin.categoryHistoryListener}" 
    onchange="submit()" value="#{admin.categoryHistory.id}"> 
    <f:converter converterId="dateAndTimeconverter"/>  
    <f:selectItems value="#{admin.categoryHistories}" var="n" 
    itemValue="#{n.id}" itemLabel="#{n.date}"> 
    </f:selectItems> 
</h:selectOneMenu> 

CategoryHistory有一個日期日期和長ID + ...

謝謝

+0

無關的實際問題:爲什麼轉換器聲明'@ ManagedBean'? – BalusC

回答

4

不幸的是,JSF轉換隻適用於輸入,而不是輸入標籤上。

您需要解決其他方法。例如。一個使用SimpleDateFormat格式化日期的吸氣劑。或者,如果你的環境支持EL 2.2,只需直接調用轉換方法(您已經將其作爲已託管bean):

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{dateAndTimeconverter.getAsString(facesContext, component, n.date)}"> 

如果你碰巧使用JSF工具庫OmniFaces,那麼你也可以使用它of:formatDate()功能。例如:

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{of:formatDate(n.date, 'd MMM yyyy')}"> 
+0

哎呀,傷害...無論如何:) –

+0

我愛OmniFaces,沒有這個偉大的圖書館,JSF是不完整的! – fareed

1

你可以在你的bean使用轉換器的方法,如:

public class Admin{ 
    ... 
     public String formatDate(Date fecha, String pattern) { 
      return (new SimpleDateFormat(pattern)).format(fecha); 
     } 
    ... 
} 

而且,在你的XHTML頁面內F:selectItems的:

<f:selectItems value="#{admin.categoryHistories}" var="n" 
       itemValue="#{n.id}" itemLabel="#{admin.formatDate(n.date,'d MMM yyyy')}"> 
</f:selectItems>