当我想保存选项列表的数据时,我收到以下错误
'组[id = null,groupName = TEST, distinguishedName =“distinguishedNameForGroup”'für'nullConverter'。
这是我用它的转换器 @FacesConverter(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>
我不明白错误,因为在网络上我发现转换器没有被调用,但绝对是。我的想法已经不多了。没有空值或任何东西。 Group.class具有相等的哈希码方法。
更新 我发现selectOneMenu会出错。这是它的代码。没有转换器,这可能是问题所在。测试它。
<p:selectOneMenu id="abteilungsleiterrolle"
value="#{bean.object.group}">
<f:selectItems value="#{bean.source}" var="q"
itemValue="#{q}" itemLabel="#{q.groupName}"/>
</p:selectOneMenu>
答案 0 :(得分:1)
试试这个
@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 )例如&#34; Group [id =&# 34; + id +&#34;]&#34; 格式正确但此转换器适用于任何类
请记住更改转换器名称:
<p:pickList
value="#{bean.groups}" var="group"
itemLabel="#{group.groupName}" itemValue="#{group}"
converter="pickListConverter">
答案 1 :(得分:0)
部分错误消息&#34; für 'null Converter'.
&#34;表示找不到有效的转换器。
您可以尝试下载:
List<Group>
,JSF应该按照您指定的forClass=Group.class
找到匹配的转换器,但我认为您不必为转换器命名< / LI>
@ManagedBean
对其进行注释,并为bean指定el,例如#{groupConverter}
如果调用转换器方法,但错误仍然存在,则转换器未找到(&#34; null转换器&#34;)错误可由其他jsf组件生成。请记住,如果您指定value =&#34;#{bean.group}&#34;其中bean.group是Group.class对象并省略转换器,然后JSF将查找用forClass =&#34; Group.class&#34;注释的转换器。这里如果你把转换器作为bean,你必须为每个组件指定转换器。