[ 
https://issues.apache.org/jira/browse/MYFACES-3344?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13120385#comment-13120385
 ] 

Leonardo Uribe commented on MYFACES-3344:
-----------------------------------------

I don't think this is a myfaces bug. If the passed instance is not serializable 
or doesn't implement StateHolder interface, the code will throw an error. It is 
not a good idea to check for a class that is an internal detail. The code in 
primefaces should be fixed instead. I'll close this one as invalid. Thanks for 
report this one.
                
> selectManyCheckbox State Saving 
> --------------------------------
>
>                 Key: MYFACES-3344
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3344
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.1.3
>         Environment: Primefaces 3.0.RC1-SNAPSHOT, WebSphere 8.0
>            Reporter: Keith Wong
>
> Hi,
> I have a problem when using p:selectManyCheckbox, as well as 
> p:selectManyMenu, with MyFaces 2. Here is the page fragment:
>       <p:inputTextarea value="#{customer.firstName}" required="true"/>
>       <p:selectManyCheckbox value="#{customer.phones}">
>               <f:selectItem itemValue="SS" itemLabel="Samsung"/>
>               <f:selectItem itemValue="LG" itemLabel="LG"/>
>               <f:selectItem itemValue="AP" itemLabel="Apple"/>
>       </p:selectManyCheckbox>
>       <p:commandButton value="Submit" process="@form" update="@form"/>
> Steps to reproduce the problem:
> 1. Let the firstName field empty and click Submit
> 2. Type something in the firstName field and click Submit
> Then, the following exception occurs, amendment to MyFaces is needed to 
> capture the stack trace,
> [2011/10/4   12:29:01:093 CST] 0000001d UIComponentBa W   类 
> javax/faces/component/UIComponentBase 非法访问 "private" 类 
> java/util/Arrays$ArrayList
>                                  java.lang.IllegalAccessException: 类 
> javax/faces/component/UIComponentBase 非法访问 "private" 类 
> java/util/Arrays$ArrayList
>       at java.lang.J9VMInternals.newInstanceImpl(Native Method)
>       at java.lang.Class.newInstance(Class.java:1345)
>       at 
> javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1717)
>       at 
> javax.faces.component._DeltaStateHelper.restoreState(_DeltaStateHelper.java:614)
>       at 
> javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1885)
>       at javax.faces.component.UIOutput.restoreState(UIOutput.java:213)
>       at javax.faces.component.UIInput.restoreState(UIInput.java:1012)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:545)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:581)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:564)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:564)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:564)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:564)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:564)
>       at 
> org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreView(DefaultFaceletsStateManagementStrategy.java:241)
>       at 
> org.apache.myfaces.application.StateManagerImpl.restoreView(StateManagerImpl.java:113)
>       at 
> org.apache.myfaces.shared.view.ViewDeclarationLanguageBase.restoreView(ViewDeclarationLanguageBase.java:106)
>       at 
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.restoreView(FaceletViewDeclarationLanguage.java:1832)
>       at 
> org.apache.myfaces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:296)
>       at 
> org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:123)
>       at 
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
>       at 
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1147)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:722)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:449)
>       at 
> com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
>       at 
> com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125)
>       at 
> com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:77)
>       at 
> com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:919)
>       at 
> com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1016)
>       at 
> com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
>       at 
> com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:883)
>       at 
> com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1659)
>       at 
> com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
>       at 
> com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
>       at 
> com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
>       at 
> com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
>       at 
> com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
>       at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
>       at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
>       at 
> com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
>       at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1648)
> After investigation, the cause could be in the saveAttachedState method of 
> UIComponentBase.java:
>         else if (attachedObject instanceof Collection)
>         {
>             if (ArrayList.class.equals(attachedObject.getClass()))
>             {
>                 List<Object> lst = new ArrayList<Object>(((List<?>) 
> attachedObject).size());
> The above fragment only consider if the attachedObject is an instance of 
> ArrayList.  However, the object returned from PrimeFaces is created by 
> Arrays.asList, which is java.util.Arrays$ArrayList.  So, when performing 
> restoreAttachedState, this private class could not be instantiated.  So, I 
> suggest to change the line
>             if (ArrayList.class.equals(attachedObject.getClass()))
> as this
>             if (ArrayList.class.equals(attachedObject.getClass()) || 
> _ClassUtils.simpleClassForName("java.util.Arrays$ArrayList").equals(attachedObject.getClass()))
> to solve the problem.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to