当我想保存我的选择列表的数据时,我得到了以下错误
'组[id=null,groupName=TEST,distinguishedName="distinguisedNameForGroup"'für'null Converter'。
这是我用来做它的转换器@FacesConvert(value="groupConverter",forClass=Group.class)公共类GroupConverter实现Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
if (value.trim().equals("")) {
return null;
}
Object ret = null;
if (component instanceof PickList) {
Object dualList = ((PickList) component).getValue();
DualListModel<?> dl = (DualListModel<?>) dualList;
for (Object o : dl.getSource()) {
String id = ((Group) o).getDistinguishedName();
if (value.equalsIgnoreCase(id)) {
ret = o;
break;
}
}
if (ret == null)
for (Object o : dl.getTarget()) {
String id = ((Group) o).getDistinguishedName();
if (value.equals(id)) {
ret = o;
break;
}
}
}
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if (value == null || value.equals("")) {
return "";
} else {
String str = "";
if (value instanceof Group) {
str = ""
+ ((Group) value)
.getDistinguishedName();
}
return str;
}
}
}
pickList的代码:
<p:pickList
value="#{bean.groups}" var="group"
itemLabel="#{group.groupName}" itemValue="#{group}"
converter="groupConverter">
</p:pickList>
我不理解这个错误,因为在网上我发现转换器没有被调用,但肯定被调用了。我的想法已经用完了。不存在null值或任何内容。Group.class有一个equal和hashcode方法。
更新:我发现selectOneMenu会出错。这是它的代码。没有转换器,这可能是问题所在。测试它。
<p:selectOneMenu id="abteilungsleiterrolle"
value="#{bean.object.group}">
<f:selectItems value="#{bean.source}" var="q"
itemValue="#{q}" itemLabel="#{q.groupName}"/>
</p:selectOneMenu>
试试这个
@ViewScope
@FacesConverter(value="pickListConverter")
public class PickListConverter implements Converter{
Map<String, Object> tmp;
@PostConstruct
public void init() {
tmp = new HashMap<String, Object>();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return tmp.get(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
} else {
tmp.put(value.toString(), value);
return value.toString();
}
}
}
这个转换器只确保toString()(NameClass和字段以及id),例如"Group[id="+id+"]"是良好的格式,但这个转换器适用于任何类
记住更改转换器名称:
<p:pickList
value="#{bean.groups}" var="group"
itemLabel="#{group.groupName}" itemValue="#{group}"
converter="pickListConverter">
错误消息"für 'null Converter'.
"的一部分表示找不到有效的转换器。您可以尝试以下操作:
- 如果#{bean.groups}解析为对象
List<Group>
,JSF应该像您指定的forClass=Group.class
一样,按类找到匹配的转换器,但我认为您不必为转换器命名 - 尝试删除for class属性以按名称引用它
- 您可以用
@ManagedBean
对其进行注释,并为bean指定el,例如#{groupConverter}
如果调用了converter方法,但错误仍然存在,则其他jsf组件可能会产生找不到转换器("null converter")错误。请记住,如果您指定value="#{bean.group}",其中bean.group是group.class对象并省略converter,那么JSF将查找用forClass="group.class"注释的converter。