I'm having the following exception in mi app
java.lang.IllegalArgumentException
javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:127)
javax.faces.component.UISelectOne.matchValue(UISelectOne.java:141)
javax.faces.component.UISelectOne.validateValue(UISelectOne.java:114)
javax.faces.component.UIInput.validate(UIInput.java:634)
javax.faces.component.UIInput.executeValidate(UIInput.java:838)
javax.faces.component.UIInput.processValidators(UIInput.java:412)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:904)
javax.faces.component.UIForm.processValidators(UIForm.java:170)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:904)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:342)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:78)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.concurrent.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:95)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
Im developing dependent selectOneListbox, the exception rises after the user selects the value for the first listbox. here is how the jsp looks like:
<h:outputText value="Ruta:" id="rutaOT" />
<h:selectOneListbox value="#{BillBean.routeID}" size="1" id="rutaList" validator="#{ValidadorBean.validate}" required="true" valueChangeListener="#{BillBean.routeListenerMethod}" onchange="this.form.submit()">
<f:selectItems value="#{GlobalData.selectRutas}" id="rutasListados" />
<f:param value=""></f:param>
</h:selectOneListbox>
<h:outputText value="Cliente:" id="clienteOT" />
<h:selectOneListbox value="#{BillBean.selectedClient}" size="1" id="clientList" validator="#{ValidadorBean.validate}" required="true">
<f:selectItems value="#{BillBean.clientList}" id="clientesListados" />
</h:selectOneListbox>
and here's how the Bean looks like
public class BillBean {
public static final Logger logger = Logger.getLogger(BillBean.class);
private Short routeID =-1;
private List<SelectItem> clientList;
private Short selectedClient;
public BillBean() {
logger.debug("entro en el contructor del bean");
SelectItem si;
if(clientList==null){
si = new SelectItem((Object)"9999","Seleccione un Cliente");
clientList = new ArrayList<SelectItem>();
clientList.add(si);
}
}
public void setRouteID(Short routeID){
this.routeID=routeID;
}
public Short getRouteID(){
return routeID;
}
public void setClientList(List<SelectItem> clientList){
logger.debug("entro aqui!!!!");
this.clientList=clientList;
}
public List<SelectItem> getClientList(){
return clientList;
}
public void setSelectedClient(Short selectedClient) {
this.selectedClient = selectedClient;
}
public Short getSelectedClient() {
return selectedClient;
}
public void routeListenerMethod( ValueChangeEvent e ){
Object value = e.getNewValue();
routeID = Short.parseShort(value.toString());
logger.debug("Valor de Route "+routeID);
fillClientList();
logger.debug("La lista contiene: !!! "+clientList.toString());
}
public List<SelectItem> fillClientList(){
BillManager billManager = new BillManager(SQLConstant.MYSQL);
UserBean sessionUserBean = (UserBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("UserBean");
Short clientCompany = sessionUserBean.getCompany();
Short distributer = sessionUserBean.getDistributer();
System.out.println("Route a utilizar es :"+routeID);
try {
this.clientList.addAll(billManager.clientsInRoute(clientCompany, distributer, routeID));
} catch (Exception e) {
logger.error("Ocurrio exception en BillBean: ", e);
}
return this.clientList;
}
}
but when you select the value for the first listbox, never reaches the routeListenerMethod.
what i've read in others forums, the problems seems to be the SelectItems inside the clientList, but the bean's scope is the entire session, and still seems to be empty.
Does anyone know what my problem is? I'm kinda newbie in the JSF world so maybe it's something easy for you all.