【问题标题】: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】:
你应该做两件事来避免这个错误:
- 确保您的班级
emp 正在实施 equals() 和 hashCode()
- 使用转换器转换您选择的值,然后再将其传递给支持 bean
BalusC 写了一篇很好的tutorial 关于转换器以及如何使用它们。