Issue Type: Enhancement Enhancement
Affects Versions: 4.2.2.Final
Assignee: Unassigned
Components: component-selects
Created: 25/Jun/12 9:13 AM
Description:

I have trouble passing a list to a rich picklist value which is located inside a composite component, my value is an ArrayList.
My bean is in viewscope.

The problem occurs while submitting the form:

javax.faces.FacesException: ModelType (class java.lang.Object) must be either an Array, or a Collection

at org.richfaces.renderkit.SelectManyHelper.getConvertedValue(SelectManyHelper.java:332)

at org.richfaces.renderkit.SelectManyRendererBase.getConvertedValue(SelectManyRendererBase.java:108)

at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)

at javax.faces.component.UIInput.validate(UIInput.java:960)

at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)

at javax.faces.component.UIInput.processValidators(UIInput.java:698)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIForm.processValidators(UIForm.java:253)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)

at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)

at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)

at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)

at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

at java.lang.Thread.run(Thread.java:662)

Sample code:

...

<composite:attribute name="beanAndValue" />

...

<rich:pickList value="#{cc.attrs.beanAndValue}" ...

I tried adding a type java.util.Collection, or java.util.List, but this had no effect.

Note that it works when the picklist is outside of the composite component.

It also works with an h:selectOneMenu works with similar code:

I have NO trouble passing a list to the value of h:selectOneMenu !

...

<composite:attribute name="beanAndValue" />

...

<h:selectOneMenu value="#{cc.attrs.beanAndValue}" ...

As this works outside the composite component and with similar components (selectOneMenu), I assume that the rich:pickList is not easy to integrate with composite components for some type issue, maybe the type gets lost and the picklist is very strict about it ?

Environment: Windows, FireFox13.0.1, Tomcat7.0.26, JSF2.1.7
Project: RichFaces
Labels: pickList composite_component
Priority: Major Major
Reporter: Christophe Roussy
Security Level: Public (Everyone can see)
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators.
For more information on JIRA, see: http://www.atlassian.com/software/jira