2015-01-27 2 views
1

열거 형을 사용하여 PrimeFaces selectOneMenu를 채우려 고했지만 선택한 값을 가져올 수 없습니다. 첫 번째 클릭을 클릭 한 후에 할당 된 값은 항상 후 생성자의 값입니다.두 번째 클릭 후 열거 형으로 채워진 SelectOneMenu 선택

HTML :

<p:selectOneMenu id="periodo" 
       value="#{dashboardMB.enumDate}"> 
    <f:selectItems value="#{dashboardMB.enumDates}" 
       var="enumDate" 
       itemValue="#{enumDate}" 
       itemLabel="#{enumDate.label}" /> 
</p:selectOneMenu> 

백업 콩 :

private EnumDate enumDate; 

@PostConstruct 
public void init() { 
    enumDate = EnumDate.YEAR; 
} 

EnumDate는 :

public enum EnumData { 
    EMPTY("- Select -"), DAY("Day"), WEEK("Week"), FORTNIGHT("Fortnight"), MONTH("Month"), BIMESTER("Bimester"), TRIMESTER("Trimester"), SEMESTER("Semester"), YEAR("Year"); 
    public String label; 
    public static final EnumSet<EnumDate> all = EnumSet.of(EMPTY, DAY, WEEK, FORTNIGHT, MONTH, BIMESTER, TRIMESTER, SEMESTER, YEAR); 

    private EnumDate(String label) { 
     this.label = label; 
    } 

    public String getLabel() { 
     return label; 
    } 
} 

따라서, 항상 값 "년"을 가지고있다. 양식을 보내는 버튼을 다시 클릭 할 때까지. OmniFaces 변환기를 사용하여 해결

:

<p:selectOneMenu id="period" 
       converter="omnifaces.SelectItemsConverter" 
       style="width: 237px !important" 
       value="#{dashboardMB.enumDate}" 
       filter="true" 
       filterMatchMode="contains" 
       panelStyleClass="oneMenuPanel" 
       styleClass="oneMenu"> 
    <f:selectItems value="#{dashboardMB.enumDateArray}" 
       var="enum" 
       itemValue="#{enum}" 
       itemLabel="#{enum.label}" /> 
</p:selectOneMenu> 

enumDateArray 특성 EnumDate[] 타입이다. Getter는 EnumDate.values()을 반환합니다.

답변

0

더 나은로 변환합니다. '수동으로'목록 변환 등의 작업보다 코드 정리 작업을 덜어줍니다.

+0

이 방법을 사용하겠습니다. 사실 그것은 다중 선택 메뉴가 아니기 때문에'SelectItemsConverter'을 사용해야했습니다. 그러나 여전히, 그것은 "Year"가치를 얻고 있습니다. 그리고 일부 기본값으로 enumDate 속성을 초기화하지 않으면 NPE를 얻습니다. – rsb2097

+0

변경되었습니다. 그런 다음 양식을 다시 보낸 후에야 가치가 있다는 것을 알았습니다. 나는'p : commandButton'에서'p : ajax'를 사용하고있었습니다. 그것을 없애고 자신의 버튼의'update'와'action' 속성을 사용했습니다. – rsb2097

+0

항상 [mcve] (http://stackoverflow.com/help/mcve)를 게시하는 이유 중 하나는 – Kukeltje

-1

당신은 XHTML에 기능 String[] EnumDatasToString()를 전달할 수 EnumData[] eds = EnumData.values(); String EDtoString = eds[0].name();

문자열

에 열거 변환합니다.

는 문자열에서 omnifaces generic enum converter를 사용하는 열거 사용

EnumData ed = EnumData.valueOf(EDToString);