【发布时间】:2014-04-14 08:28:08
【问题描述】:
我仍然有 selectManyCheckBox 的问题..
selectManyCheckBox:
<p:selectManyCheckbox converter="genericEnumConverter" value="#{aView.newObject.aValue}">
<f:selectItems value="#{enumBean.aValueValues}" var="s" itemValue="#{s}" itemLabel = "#{s.name}"/>
</p:selectManyCheckbox>
此 selectManyCheckBox 的转换器与此处描述的相同: Use enum in h:selectManyCheckbox
@FacesConverter("genericEnumConverter")
public class GenericEnumConverter implements Converter {
private static final String ATTRIBUTE_ENUM_TYPE = "GenericEnumConverter.enumType";
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println("getAsString 1: ");
if (value instanceof Enum) {
System.out.println("getAsString 2: ");
component.getAttributes().put(ATTRIBUTE_ENUM_TYPE, value.getClass());
System.out.println("getAsString 3: ");
return ((Enum<?>) value).name();
} else {
System.out.println("getAsString 4: ");
throw new ConverterException(new FacesMessage("Value is not an enum: " + value.getClass()));
}
}
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public Object getAsObject(FacesContext context, UIComponent component, String value) {
System.out.println("getAsObject 1: ");
Class<Enum> enumType = (Class<Enum>) component.getAttributes().get(ATTRIBUTE_ENUM_TYPE);
System.out.println("getAsObject 2: ");
try {
System.out.println("getAsObject 3: ");
return Enum.valueOf(enumType, value);
} catch (IllegalArgumentException e) {
System.out.println("getAsObject 4: ");
throw new ConverterException(new FacesMessage("Value is not an enum of type: " + enumType));
}
}
枚举是:
public enum aValue {
1Value,
2Value,
3Value,
4Value;
private final String name;
private aValue() {
System.out.println("aValue 1");
this.name = null;
System.out.println("aValue 2");
}
public String getName() {
System.out.println("getName 1 " + name());
return ResourceBundleUtil.getLabelFromRb("aValue." + name());
}
}
public aValue[] getAValueValues() {
return AValue.values();
}
Tomcat 日志是:
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
aValue 1
aValue 2
getName 1Value
getName 2Value
getName 3Value
getName 4Value
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getName 1Value
getName 2Value
getName 3Value
getName 4Value
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
getAsString 1:
getAsString 2:
getAsString 3:
当我按下保存按钮时,没有任何反应,也没有任何内容保存到数据库中。看起来它不会进入 getAsObject 方法。我不知道为什么。当我将组件更改为 SelectOneMenu 时,没有问题。但是这个 selectManyCheckBox 东西不起作用。有人知道吗?
【问题讨论】:
-
如果您使用
p:commandButton添加属性ajax="false"并检查事件是否触发。 -
我对这些情况的处理是在 javax.faces.component.UIinput 的 processDecodes(FacesContext context) 和 getConvertedValue(context,mittedValue) 上设置一个断点并查找请求参数
标签: jsf enums selectmanycheckbox