나는 누구의 코드를 다음과 같이이다 열거이 -JSF '검증 오류 : 값이 유효하지 않습니다'
public enum COSOptionType {
NOTAPPLICABLE,
OPTIONAL,
MANDATORY;
private String[] label = { "Not Applicable", "Optional", "Mandatory"};
@Override
public String toString() {
return label[this.ordinal()];
}
public static COSOptionType getCOSOption(String value) {
int ivalue = Integer.parseInt(value);
switch(ivalue) {
case 0:
return NOTAPPLICABLE;
case 1:
return OPTIONAL;
case 2:
return MANDATORY;
default:
throw new RuntimeException("Should not get this far ever!");
}
}
}
나는 열거 형에게
public class COSEnumConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent comp, String value) {
return COSOptionType.getCOSOption(value);
}
public String getAsString(FacesContext context, UIComponent comp, Object obj) {
if (obj instanceof String) {
return (String) obj;
}
COSOptionType type = (COSOptionType) obj;
int index = type.ordinal();
return ""+index;
}
}
뷰를 변환하는 컨버터를 다음은이
<h:selectOneMenu value="#{controller.type}" id="smoking">
<f:selectItems value="#{jnyController.choices}" />
</h:selectOneMenu>
처럼 보이는 것은 선택을 만들 코드입니다
private List<SelectItem> createChoicies() {
List<SelectItem> list = new ArrayList<SelectItem>();
for (COSOptionType cos : COSOptionType.values()) {
SelectItem item = new SelectItem();
item.setLabel(cos.toString());
item.setValue("" + cos.ordinal());
list.add(item);
}
return list;
}
왜 "유효성 검사 오류"가 발생하는지 이해할 수 없습니까? 내가 디버그하고 컨버터가 잘 작동하는지 볼 수 있습니다.
NOTE: I am using JSF 1.1
이렇게하면 문제가 해결됩니다. 고맙습니다. – Shamik
이상하게도 변환기의 getAsString()은 완전히 똑같습니다. – BalusC
근본 원인은 변환기가 getAsObject()에서' ""+ cos.ordinal() "대신"COSOptionType "을 반환한다는 것입니다. 따라서 기존 옵션에는 전혀 나타나지 않습니다. – BalusC