Problem using SelectItems inside selectOneMenu
david_ling May 4, 2008 12:10 PMHi,
I am having some problems with using a
<f:selectItems>element inside
<h:selectOneMenu>.
To start off I created a Jbpm4Jsf tag/class that loads up a list of users, which I have tried to put into a Map and now a List. I return this Map/List as the target inside the page and then place the target as the SelectItems value.
Please see code below
<ga:responseActions> <j4j:listAcademics target="#{academics}"/> </ga:responseActions> <jbpm:datacell> <f:facet name="header"> <h:outputText value="Supervisor"/> </f:facet> <h:selectOneMenu value="#{var['potentialsupervisor']}"> <f:selectItems value="#{academics}"/> </h:selectOneMenu> <!-- <h:inputText value="#{var['potentialsupervisor']}"/>--> </jbpm:datacell>
However, when I submit my form, it throws a bunch of exceptions
javax.servlet.ServletException javax.faces.webapp.FacesServlet.service(FacesServlet.java:256) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) root cause java.lang.IllegalArgumentException javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:166) javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:49) javax.faces.component.UISelectOne.matchValue(UISelectOne.java:165) javax.faces.component.UISelectOne.validateValue(UISelectOne.java:137) javax.faces.component.UIInput.validate(UIInput.java:868) javax.faces.component.UIInput.executeValidate(UIInput.java:1071) javax.faces.component.UIInput.processValidators(UIInput.java:663) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIForm.processValidators(UIForm.java:229) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1021) javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
The tag/class I use to list all the academics is the following
public final class ListAcademicsActionListener implements JbpmActionListener { private final ValueExpression targetExpression; public ListAcademicsActionListener(final ValueExpression targetExpression) { this.targetExpression = targetExpression; } public String getName() { return "listAcademics"; } @SuppressWarnings ({"unchecked"}) public void handleAction(JbpmJsfContext context, ActionEvent event) { try { final FacesContext facesContext = FacesContext.getCurrentInstance(); final ELContext elContext = facesContext.getELContext(); final Collection<SelectItem> academicsList = new Vector<SelectItem>(); ... //queries DB some academics names and their userID while(academics.next()){ SelectItem academic = new SelectItem(lecturerLogin, lecturer); academicsList.add(academic); } targetExpression.setValue(elContext, Collections.unmodifiableCollection(academicsList)); context.selectOutcome("success"); }
So far all the lecturer's names and logins come up fine, but the problem is when I submit the form. I've searched around and there seems to be similar problems, but never quite the same. Any help is appreciated.
Thanks
David