Note that there are some explanatory texts on larger screens.

plurals
  1. POConverter class throwing exception java.lang.IllegalArgumentException
    text
    copied!<p>I have p:selectOneMenu in my JSF page and when I run my JSF page I am getting the following exception from Converter class.</p> <pre><code>java.lang.IllegalArgumentException: object 5634 is of type java.lang.String; expected type: test.entity.Employee </code></pre> <p>How can I resolve this issue?</p> <p>I have the following in Entity class</p> <pre><code>@Entity public class Employee implements Serializable { private String employeeNumber; private String employeeName; /* getters and setters */ </code></pre> <p>EmployeeConverter class</p> <pre><code>@Component("employeeConverter") @FacesConverter(forClass = Employee.class) @Inject EmployeeService employeeService; @Override public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { if (value == null || value.length() == 0) { return null; } EmployeeService employeeService= (EmployeeService ) facesContext.getApplication().getELResolver(). getValue(facesContext.getELContext(), null, "employeeService"); return employeeService.getEmployees(); } @Override public String getAsString(FacesContext facesContext, UIComponent component, Object object) { if (object == null) { return null; } if (object instanceof Employee) { Employee emp = (Employee) object; String val = emp.getEmployeeNumber(); return val; } else { throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Employee.class.getName()); } } </code></pre> <p>and in jsf page </p> <pre><code> &lt;p:selectOneMenu value="#{mb.employee}" converter="#{employeeConverter}"&gt; &lt;f:selectItems value="#{cmb.employeeList}" var="emp" itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeNumber}"/&gt; &lt;p:ajax listener="#{mb.handleChange}" process="@this"/&gt; &lt;/p:selectOneMenu&gt; </code></pre> <p><strong>Update 1</strong></p> <p>Modified Converter method <code>getAsObject</code></p> <pre><code>private List&lt;Employee&gt; employee; @Override public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { System.out.println("reached in converter"); try { if (value == null || value.length() == 0) { return null; } else { employee = getEmployeeService().getEmployees(); for (Employee emp : employee) { if (emp.getEmployeeNUmber() == value) { return emp; } } } } catch (Exception e) { System.out.println("exception from getAsObject " + e.getMessage()); } return null; } </code></pre> <p><strong>Update 2</strong></p> <pre><code>ManagedBean @PostConstruct public void loadEmployees(){ try { List&lt;Employee&gt; emp = getEmployeeService().getEmployees(); employeeList = emp; } catch(Exception e){ e.printStackTrace(); System.out.println("exception from loadEmployees "+e.getMessage()); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload