2010-01-28 8 views
1

<h:selectOneMenu><f:selectItems>이 있고 CategoryHistory 개의 개체가로드되었습니다. Date date 필드는 itemLabel으로 표시됩니다. 그게 작동하지만 날짜를 포맷하고 싶습니다 : javax.faces.convert.DateTimeConverter을 확장하고 생성자의 필드를 변경하는 변환기를 만들었습니다. 하지만 내 날짜는DateTimeConverter를 사용하여 <f : selectItem (s) itemLabel> 형식 날짜가

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> 

그것은 또한 내가하려고 할 때 작동하지 않습니다 기본 형식 :(

DateAndTimeConverter.java에 표시 :

<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

당신이

+0

관련없는 왜 변환기가'@ ManagedBean'으로 선언 되었습니까? – BalusC

답변

4

불행히도, JSF 컨버터뿐만 아니라 입력 라벨에 입력 에 적용 감사 ... 날짜 날짜 및 긴 ID +이 있습니다.

다른 방법으로 해결해야합니다. 예 : getter는 SimpleDateFormat을 사용하여 날짜의 서식을 지정합니다. 당신이 JSF 유틸리티 라이브러리 OmniFaces를 사용하는 일이 있다면, 당신은 또한 of:formatDate() 기능을 사용할 수 있습니다

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

: 사용자 환경 EL 2.2을 지원하는 경우 또는 단순히 (이미 관리 빈로했습니다) 직접 변환 메소드를 호출 . 예 :

<f:selectItems value="#{admin.categoryHistories}" var="n" itemValue="#{n.id}" 
    itemLabel="#{of:formatDate(n.date, 'd MMM yyyy')}"> 
당신은으로, 여러분의 빈의 변환 방법을 사용할 수 있습니다
+0

아프다 ... 고맙다 어쨌든 :) –

+0

나는 OmniFaces를 좋아한다. JSF는이 위대한 라이브러리 없이는 완벽하지 않다! – fareed

1

: selectItems : F 내부에 XHTML 페이지에서,

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

그리고 실제 문제에

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