[jboss-user] [JBoss jBPM] - [Workaround] Re: Combo Box in Form

karstendausb do-not-reply at jboss.com
Tue Sep 4 21:06:41 EDT 2007


"kukeltje" wrote : please.... what is so difficult about my previous post.... this is JSF stuff, not jBPM. So please ask in the correct forum and learn JSF!!!! 

I wouldn't say this is totally wrong, but it is pretty far away from the truth, as jBPM is probably very well involved in this problem.

I ran into the same problem today, and spent many hours to figure this out. There are many postings in this forum, but not a solution. I will describe  a workaround and one possible cause for this problem.

Setup:
jbpm-3.2.1-ear on jboss 4.0.4

Same problem as Riket44: After adding a collection of SelectItem as a process variable like this in an  actionhandler

  | Collection selectItems=new ArrayList();
  | selectItems.add(new SelectItem("BLA","Fasel"));
  | selectItems.add(new SelectItem("BLoe","Fasel2"));
  | executionContext.getContextInstance().createVariable("selectit1",selectItems);
  | 
using it in a task form like this:

  | ...
  |  <h:selectOneMenu id="bla22" value="#{var['userselection']}">
  | <f:selectItems value="#{var['selectit1']}" />		
  | </h:selectOneMenu>
  | ...
  | 
got me this Exception:

  | java.lang.IllegalArgumentException: Argument Error: An option for component j_id48 was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList.
  | 

I also tried
* List of SelectItem
* Collection of SelectItem
* SelectItem []
,all with similar Exceptions.

When I changed the form to

  |  <h:selectOneMenu id="bla22" value="#{var['userselection']}">
  | <f:selectItem value="#{var['selectit1'][0]}" />		
  | </h:selectOneMenu>
  |  

I got this very nice Exception:

  | java.lang.IllegalArgumentException: "Argument Error: An option for component bla22 was not an instance of javax.faces.model.SelectItem.  Type found: javax.faces.model.SelectItem.
  | 	at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:315)
  | 

Wow. How is that?  It is not a SelectItem, it is a  SelectItem!

Looking at RenderKitUtils.java  I found that the comparison
 (value instanceof SelectItem)  must have returned false. This is weired, because instances of javax.faces.model.SelectItem is exactly what has been put into the collection in the actionhandler.

I am not sure what causes this. I first thought that it would be a persistence-related classloading problem (persistence layer using myfaces-jars from tomcat-sar instead of sun's ri vom jbpm-ear), but that doesn't seem to the problem: I replaced the myfaces-jars in tomcat-sar/jsf-libs with the sun-ri-jars, but that didn't help. 

Any ideas? I would love to here the solution to this (not only, but especially from Ronald (time to prove that this is a JSF-problem ;-)) ?

Ah, I promised a workaround:
Furtheron in the code, I found that the value attribute of SelectItems also takes a map (key->label, value->value). So I tried this one, and that worked like it was expected to be:
Put

  | Map mymap=new HashMap();
  | mymap.put("bla", "fasel");
  | executionContext.getContextInstance().createVariable("selectit1",mymap);
  | 
in the handler.
And the snippet

  |  <h:selectOneMenu id="bla22" value="#{var['userselection']}">
  | <f:selectItems value="#{var['selectit1']}" />		
  | </h:selectOneMenu>
  | 
in the form.

Hope this helps, but I would very much appreciate a proper solution!



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4081146#4081146

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4081146



More information about the jboss-user mailing list