java - menú desplegable "Valor de configuración de error de conversión '''' para ''Convertidor nulo''"
drop-down-menu seam (2)
Debes hacer 2 cosas para evitar este error:
- Asegúrate de que tu clase
emp
esté implementandoequals()
yhashCode()
- Use un convertidor para convertir el valor seleccionado antes de pasarlo al bean de respaldo
BalusC escribió un buen tutorial sobre los convertidores y cómo usarlos.
Esta pregunta ya tiene una respuesta aquí:
Así que estoy usando costura para tratar de crear un menú desplegable para agregar una entrega a una base de datos. Estoy usando un menú desplegable para seleccionar qué empleado de la base de datos está haciendo la entrega. El menú carga a todos los empleados en la base de datos, pero cuando selecciono uno y hago clic en Agregar, aparece el error "Valor de configuración de error de conversión" (hash para empleado) ''para'' Convertidor nulo ''.
aquí está el código para el menú desplegable:
<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>
Cualquier ayuda sería muy apreciada. Gracias
Implementé el convertidor y equals () y hashCode () en la clase Employee (clase de emp) de acuerdo con la respuesta de @flash.
Parte de 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>
Clase 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();
}
}
Parte de la clase de empleado (la clase de emp, supuestamente employeeId is 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 + "]";
}
Tuve un problema similar. Funcionó para mí