JSF 2.0"转换错误设置值' courseID' for' null Converter'在Primefaces领料单上

时间:2014-04-11 08:42:56

标签: java jsf jsf-2 primefaces

当我想保存选项列表的数据时,我收到以下错误

  

'组[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>

2 个答案:

答案 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;表示找不到有效的转换器。 您可以尝试下载:

  • 如果#{bean.groups}解析为对象List<Group>,JSF应该按照您指定的forClass=Group.class找到匹配的转换器,但我认为您不必为转换器命名< / LI>
  • 尝试删除class属性以按名称
  • 引用它
  • 您可以使用@ManagedBean对其进行注释,并为bean指定el,例如#{groupConverter}

如果调用转换器方法,但错误仍然存​​在,则转换器未找到(&#34; null转换器&#34;)错误可由其他jsf组件生成。请记住,如果您指定value =&#34;#{bean.group}&#34;其中bean.group是Group.class对象并省略转换器,然后JSF将查找用forClass =&#34; Group.class&#34;注释的转换器。这里如果你把转换器作为bean,你必须为每个组件指定转换器。