【问题标题】:dropdown menu "Conversion Error setting value '' for 'null Converter'" [duplicate]下拉菜单“'null Converter'的转换错误设置值''”[重复]
【发布时间】:2012-06-06 17:51:45
【问题描述】:

所以我正在使用 seam 尝试制作一个下拉菜单以将交付添加到数据库。我正在使用下拉菜单来选择数据库中的哪个员工正在交付。该菜单可以很好地加载数据库中的所有员工,但是当我选择一个并单击添加时,我收到错误“Conversion Error setting value '(hash for employee)' for 'null Converter'。

这是下拉菜单的代码:

<my:dropdown label="Employee ID" id="emp" value="#{deliveryPort.emp}" required="false">
                    <f:selectItem itemValue="#{null}" itemLabel="Selct One"/>
                    <s:selectItems value="#{deliveryPort.empList}" var="emp" label="#   {emp.employeeId} #{ emp.nameFirst}"/> 
               </my:dropdown>

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: java drop-down-menu seam


    【解决方案1】:

    我根据@flash的回答在Employee类(emp类)中实现了转换器和equals()&hashCode()。

    XHTML 的一部分:

    <my:dropdown label="Employee ID" id="emp" value="#{deliveryPort.emp}" required="false">
        <f:selectItem itemValue="#{null}" itemLabel="Selct One"/>
        <s:selectItems value="#{deliveryPort.empList}" var="emp" label="#   {emp.employeeId} #{ emp.nameFirst}"/> 
        <f:converter converterId="empConverter" />
    </my:dropdown>
    

    EmployeeConverter 类:

    package mypackage.converters;
    
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.FacesConverter;
    
    @FacesConverter("empConverter")
    public class EmployeeConverter implements Converter
    {
    
        public Object getAsObject(FacesContext context, UIComponent component, String value)
        {
            return value;
        }
    
        public String getAsString(FacesContext context, UIComponent component, Object value)
        {
            return value.toString();
        }
    
    }
    

    Employee类的一部分(emp的类,据说employeeId是String):

    public boolean equals(Object other)
    {
        return other instanceof Employee && (employeeId != null) ? employeeId.equals(((Employee) other).employeeId) : (other == this);
    }
    
    public int hashCode()
    {
        return employeeId != null ? this.getClass().hashCode() + employeeId.hashCode() : super.hashCode();
    }
    
    public String toString()
    {
        return "Employee[" + employeeId + "," + nameFirst + "]";
    }
    

    我遇到了类似的问题。它对我有用。

    【讨论】:

      【解决方案2】:

      你应该做两件事来避免这个错误:

      1. 确保您的班级 emp 正在实施 equals()hashCode()
      2. 使用转换器转换您选择的值,然后再将其传递给支持 bean

      BalusC 写了一篇很好的tutorial 关于转换器以及如何使用它们。

      【讨论】:

      • 非常感谢您的帮助。这也是一篇精彩的文章。
      猜你喜欢
      • 2012-10-22
      • 2021-05-12
      • 2013-03-17
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2011-09-23
      • 2011-10-31
      相关资源
      最近更新 更多