2012-06-01 71 views
5

因此,我正在使用seam來嘗試創建一個下拉菜單以將傳遞添加到數據庫。我正在使用下拉菜單來選擇數據庫中的哪位員工正在進行交付。菜單加載數據庫中的所有員工就好了,但是當我選擇一個並點擊添加時,我會爲'null Converter'收到錯誤「轉換錯誤設置值'(散列員工)''下拉菜單「轉換錯誤設置值」爲'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> 

任何幫助將不勝感激謝謝

回答

7

你應該做兩件事情,以避免這個錯誤:

  1. 確保你的類emp正在實施equals()hashCode()
  2. 使用一個轉換器將它傳遞給後臺bean

BalusC之前,您選擇的值轉換寫了一個漂亮的tutorial有關轉換器,以及如何使用它們。

+0

非常感謝您的幫助。這也是一篇很棒的文章。 – user1423793

0

根據@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類的部分(類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 + "]"; 
} 

我類似的問題。它爲我工作。