2012-06-01 16 views
5

Quindi sto utilizzando la giunzione per provare a creare un menu a discesa per aggiungere una consegna a un database. Sto usando un menu a discesa per selezionare quale dipendente dal database sta effettuando la consegna. Il menu carica tutti gli impiegati nel database, ma quando seleziono uno e faccio clic su aggiungi, viene visualizzato l'errore "Errore conversione valore di impostazione" (hash per dipendente) per "Convertitore nullo".menu a discesa "Errore conversione valore di impostazione" per "Convertitore null" "

ecco il codice per Nel menu a discesa:.

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

Qualsiasi aiuto sarebbe molto apprezzato Grazie

risposta

7

si dovrebbe fare 2 cose per evitare questo errore:

  1. assicurarsi che la classe emp sta attuando equals() e hashCode()
  2. utilizzare un convertitore per convertire il vostro valore selezionato prima di passarlo al supporto di fagioli

BalusC ha scritto un bel tutorial sui convertitori e come usarli.

+0

grazie mille per il vostro aiuto. Anche questo è un articolo meraviglioso. – user1423793

0

Ho implementato il convertitore ed è uguale a() & hashCode() nella classe Employee (classe di emp) in base alla risposta di @flash.

Parte di 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 Classe:

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(); 
    } 

} 

Parte della classe Employee (la classe di emp, presumibilmente 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 + "]"; 
} 

ho avuto un problema simile Ha funzionato per me.