IllegalArgument Exception while using SelectItems in selectOneMenu
ms_shitole Jul 11, 2008 1:50 PMHi,
I am having some problems with using a
Code:
<f:selectItems>
element inside
Code:
<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
Code:
<ga:responseActions>
<id:listProjectLeaders target="#{plList}"/>
</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
Code:
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
Code:
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
--Mansingh Shitole
I am having some problems with using a
Code:
<f:selectItems>
element inside
Code:
<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
Code:
<ga:responseActions>
<id:listProjectLeaders target="#{plList}"/>
</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
Code:
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
Code:
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
--Mansingh Shitole