h:selectManyCheckbox で enum を使用しますか?で説明されている EnumConverter を作成しました。このコンバーターがプライムフェイスの編集可能なデータテーブルで適切に機能しないことがわかるまでは、すべて問題ありませんでした。問題は、次のように getAsString および getAsObject メソッド内に属性を追加したにもかかわらずです。
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof Enum) {
component.getAttributes().put(ATTRIBUTE_ENUM_TYPE, value.getClass());
return ((Enum<?>) value).name();
} else {
throw new ConverterException(new FacesMessage("Value is not an enum: " + value.getClass()));
}
}
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Class<Enum> enumType = (Class<Enum>) component.getAttributes().get(ATTRIBUTE_ENUM_TYPE);
try {
return Enum.valueOf(enumType, value);
} catch (IllegalArgumentException e) {
throw new ConverterException(new FacesMessage("Value is not an enum of type: " + enumType));
}
}
後者の method( getAsObject
) では、コンポーネントの属性マップに指定した属性が見つかりませんでした。しかし、pprimefaces の編集可能なデータテーブルからは、すべて問題ありません。これを達成するための解決策はありますか?