열거 형을 사용하여 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()
을 반환합니다.
이 방법을 사용하겠습니다. 사실 그것은 다중 선택 메뉴가 아니기 때문에'SelectItemsConverter'을 사용해야했습니다. 그러나 여전히, 그것은 "Year"가치를 얻고 있습니다. 그리고 일부 기본값으로 enumDate 속성을 초기화하지 않으면 NPE를 얻습니다. – rsb2097
변경되었습니다. 그런 다음 양식을 다시 보낸 후에야 가치가 있다는 것을 알았습니다. 나는'p : commandButton'에서'p : ajax'를 사용하고있었습니다. 그것을 없애고 자신의 버튼의'update'와'action' 속성을 사용했습니다. – rsb2097
항상 [mcve] (http://stackoverflow.com/help/mcve)를 게시하는 이유 중 하나는 – Kukeltje