当前位置: 首页 > 知识库问答 >
问题:

JSF 2.0“转换错误为Primefaces选择列表上的”null converter“设置值”course id“

酆君墨
2023-03-14

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

@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;
    }

}
<p:pickList
    value="#{bean.groups}" var="group"
    itemLabel="#{group.groupName}" itemValue="#{group}"
    converter="groupConverter">
</p:pickList>

我不明白这个错误,因为在web中我发现转换器没有被调用,但肯定是被调用的。我快没主意了。没有空值或任何东西。类有一个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>

共有1个答案

邵耀
2023-03-14

试试这个

 @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()(名称类、字段和id)(例如“group[id=”+id+“]”)格式良好,但此转换器适用于任何类

并记住更改转换器名称:

<p:pickList
value="#{bean.groups}" var="group"
itemLabel="#{group.groupName}" itemValue="#{group}"
converter="pickListConverter">
 类似资料:
  • 问题内容: 有没有一种方法可以针对具有指向ArrayList或List的where子句的数据源(可以是sql,oracle或access)创建查询? 例子: 我已经看到了使用Linq的一些方法,但是如果可以避免的话,我宁愿不诉诸于此。 问题答案: 您可以使用。尝试这样的事情: 附带说明,这不能保护您免受SQL注入的侵害-希望本示例将为您指明正确的方向。

  • 问题内容: 我的.xhtml页面中有一个: 它只是在进行Ajax调用。如何在Ajax调用过程中检测到(客户端/浏览器的)互联网连接问题,超时,会话超时,服务器端异常,崩溃等情况,以便向用户显示有用的消息? 是否处理所有这些属性?如果没有,那又如何?:)默认超时时间是多少? 任何帮助表示赞赏,谢谢。 问题答案: onerror调用此函数: onerror(xhr,status,exception)-

  • 有人能向我解释下一行代码会发生什么以及它为什么有效吗? 上面的代码工作正常。它将数组转换为列表,然后添加另一个元素。但是下面的代码不起作用 上面的代码给了我以下错误:线程“main”java.lang.UnsupportedOperationException有人能告诉我这两个转换之间的区别吗?为什么只有第一个转换有效??提前谢谢

  • 我有一个primefaces p:treeTable,在它里面我定义了一个包含两个组件的列:span标记和h:outputText标记。当前,如果我单击其中一个元素,就会触发select event of table。但我的目的是,仅当我单击文本的某个部分(而不是span元素)时,才会触发select事件。我该怎么做?

  • 问题内容: 如何将String [](数组)转换为Collection,例如ArrayList或HashSet? 问题答案: Arrays.asList()可以在这里解决问题。 要转换为Set,您可以执行以下操作

  • 组织。喷气式飞机。插件。格拉德尔。设置。无法将渐变设置转换为组织。喷气式飞机。插件。格拉德尔。设置。尝试构建新项目时发生渐变设置错误 我手动下载http://services.gradle.org/distributions/gradle-1.6-bin.zip并将zip内容复制到C:\Program Files(x86)\Android\android-dios\plugins\gradle文件