下拉菜单“转换错误设置值”为'null转换器'“

时间:2012-06-01 13:21:16

标签: java drop-down-menu seam

所以我使用seam来尝试创建一个下拉菜单以将交付添加到数据库。我正在使用下拉菜单选择数据库中的哪个员工正在进行交付。菜单加载数据库中的所有员工就好了但是当我选择一个并单击添加时,我收到“转换错误设置值”(员工的哈希)''null转换器'的错误。

这是下拉菜单的代码:

<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>

非常感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:7)

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

  1. 确保您的班级emp正在实施equals()hashCode()
  2. 使用转换器转换所选值,然后将其传递给支持bean
  3. BalusC写了一篇关于转换器的好tutorial以及如何使用它们。

答案 1 :(得分:0)

我实现了转换器和equals()&amp;根据@flash的答案,在Employee类(emp的类)中使用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 Class的一部分(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 + "]";
}

我有类似的问题。它对我有用。