我写了一个 EnumConverter,在Use enum in h:selectManyCheckbox 中进行了描述?一切都很好,直到我们认识到这个转换器在 primefaces 可编辑数据表中不能正常工作。问题是,虽然我在 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));
}
}
在后一种方法中(getAsObject
)找不到我赋予组件属性映射的属性。但是在 pprimefaces 可编辑的数据表中,一切都很好。有什么解决方案可以实现这一目标吗?