12 Replies Latest reply on Nov 17, 2009 9:27 AM by John Ba

    Problem with fileupload class org.richfaces.event.UploadAjax

    goompas goompas Newbie

      Hi
      I have problem with rich:fileupload component.
      My xhtml look like that

      <h:panelGrid columns="2" columnClasses="top,top">
       <rich:fileUpload fileUploadListener="#{FilesUploadMB.listener}"
       maxFilesQuantity="#{FilesUploadMB.uploadsAvailable}"
       id="upload"
       immediateUpload="#{FilesUploadMB.autoUpload}"
       acceptedTypes="jpg, gif, png, bmp" allowFlash="#{FilesUploadMB.useFlash}">
       <a4j:support event="onuploadcomplete" reRender="fileinfo" />
       </rich:fileUpload>
      
       </h:panelGrid>


      Action
      public void listener(UploadEvent event) throws Exception
       {
       System.out.println("listener ");
       UploadItem item = event.getUploadItem();
      
       File file = new File();
       file.setLength(item.getData().length);
       file.setName(item.getFileName());
       file.setData(item.getData());
       System.out.println("file size "+file.getLength());
       files.add(file);
       uploadsAvailable--;
       }


      Now, when i click upload file i have error
      An Error Occurred:
      FacesEvent of class org.richfaces.event.UploadAjaxActionEvent not supported by UIInput


      Why org.richfaces.event.UploadAjaxActionEvent. I dont use it. I use
      import org.richfaces.event.UploadEvent;


        • 1. Re: Problem with fileupload class org.richfaces.event.Upload
          Nick Belaevski Master

          Are you using MyFaces? Try the latest one.

          • 3. Re: Problem with fileupload class org.richfaces.event.Upload
            goompas goompas Newbie

            Sorry for duble post, but there is no edit
            i add stact trace

            java.lang.IllegalArgumentException: FacesEvent of class org.richfaces.event.UploadAjaxActionEvent not supported by UIInput
             at javax.faces.component.UIInput.broadcast(UIInput.java:192)
             at org.richfaces.component.UIFileUpload.broadcast(UIFileUpload.java:221)
             at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
             at org.ajax4jsf.component.AjaxViewRoot.broadcastAjaxEvents(AjaxViewRoot.java:340)
             at org.ajax4jsf.application.AjaxViewHandler.processAjaxEvents(AjaxViewHandler.java:216)
             at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:169)
             at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
             at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
             at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
             at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
             at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
             at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
             at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
             at mikronika.se.env.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:58)
             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
             at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
             at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
             at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
             at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
             at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
             at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
             at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
             at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
             at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
             at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
             at java.lang.Thread.run(Thread.java:619)
            


            • 4. Re: Problem with fileupload class org.richfaces.event.Upload
              Nick Belaevski Master

               

              "goompas" wrote:
              Yes, we using latest MyFaces 1.2.3

              That's not the latest one.

              • 5. Re: Problem with fileupload class org.richfaces.event.Upload
                goompas goompas Newbie

                You have right. Now i have MyFaces 12.7 and there is no exc, but fileUploadListener is not called. I have enctype "multipart/form-data".

                • 6. Re: Problem with fileupload class org.richfaces.event.Upload
                  Nick Belaevski Master

                  Make sure you have configured filters properly. Take a look at documentation for more info.

                  • 7. Re: Problem with fileupload class org.richfaces.event.Upload
                    John Ba Newbie

                    I have exactly the same problem with MyFaces 1.2.7 and RichFaces 3.3.2 SR1.

                    It seems that it has been a problem a while ago : http://jira.jboss.com/jira/browse/RF-2514 . But this should have been fixed on 3.2.1 so I don't understand why is it still a problem.

                    • 8. Re: Problem with fileupload class org.richfaces.event.Upload
                      Ilya Shaikovsky Master

                       


                      Make sure you have configured filters properly. Take a look at documentation for more info.

                      the same question for you..

                      • 9. Re: Problem with fileupload class org.richfaces.event.Upload
                        John Ba Newbie

                        I followed the documentation instructions about the filters and still no changes. I'm using the example from LiveDemo so it's probably not a code-related problem.

                        Here is my web.xml :

                        <?xml version="1.0" encoding="UTF-8"?>
                        <web-app version="2.4"
                         xmlns="http://java.sun.com/xml/ns/j2ee"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
                        
                         <!-- Facelets Configuration -->
                         <context-param>
                         <param-name>facelets.DEVELOPMENT</param-name>
                         <param-value>true</param-value>
                         </context-param>
                         <context-param>
                         <!-- Refresh the pages so we can edit pages while running the application -->
                         <param-name>facelets.REFRESH_PERIOD</param-name>
                         <param-value>2</param-value>
                         </context-param>
                         <context-param>
                         <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
                         <param-value>.xhtml</param-value>
                         </context-param>
                         <context-param>
                         <param-name>facelets.VIEW_MAPPINGS</param-name>
                         <param-value>*.xhtml</param-value>
                         </context-param>
                         <context-param>
                         <description>see bug https://issues.apache.org/jira/browse/MYFACES-1786
                         ...if the web container is restarted, a new secret is generated..causing javax.crypto.BadPaddingException
                         when JSF tries to restore state
                         </description>
                         <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
                         <param-value>false</param-value>
                         </context-param>
                         <context-param>
                         <param-name>facelets.SKIP_COMMENTS</param-name>
                         <param-value>true</param-value>
                         </context-param>
                        
                         <!-- MyFaces Configuration -->
                         <context-param>
                         <!-- Disables state compression on server -->
                         <param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION</param-name>
                         <param-value>false</param-value>
                         </context-param>
                         <context-param>
                         <!-- Disables state serialization on server -->
                         <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
                         <param-value>false</param-value>
                         </context-param>
                         <context-param>
                         <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
                         <param-value>false</param-value>
                         </context-param>
                        
                         <!-- RichFaces Configuration -->
                         <context-param>
                         <param-name>org.richfaces.SKIN</param-name>
                         <param-value>blueSky</param-value>
                         </context-param>
                         <context-param>
                         <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name>
                         <param-value>true</param-value>
                         </context-param>
                         <context-param>
                         <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
                         <param-value>com.sun.facelets.FaceletViewHandler</param-value>
                         </context-param>
                        
                         <!-- Ajax4jsf Filter -->
                         <filter>
                         <display-name>Ajax4jsf Filter</display-name>
                         <filter-name>ajax4jsf</filter-name>
                         <filter-class>org.ajax4jsf.Filter</filter-class>
                         <init-param>
                         <param-name>createTempFiles</param-name>
                         <param-value>true</param-value>
                         </init-param>
                         <init-param>
                         <param-name>maxRequestSize</param-name>
                         <param-value>20000000</param-value>
                         </init-param>
                         </filter>
                         <!-- MyFaces ExtensionsFilter -->
                         <filter>
                         <filter-name>extensionsFilter</filter-name>
                         <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
                         <init-param>
                         <description> Set the size limit for uploaded files. Format: 10 - 10
                         bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB </description>
                         <param-name>uploadMaxFileSize</param-name>
                         <param-value>100m</param-value>
                         </init-param>
                         <init-param>
                         <description> Set the threshold size - files below this limit are
                         stored in memory, files above this limit are stored on disk. Format:
                         10 - 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB </description>
                         <param-name>uploadThresholdSize</param-name>
                         <param-value>100k</param-value>
                         </init-param>
                         </filter>
                         <filter-mapping>
                         <filter-name>ajax4jsf</filter-name>
                         <servlet-name>Faces Servlet</servlet-name>
                         <dispatcher>REQUEST</dispatcher>
                         <dispatcher>FORWARD</dispatcher>
                         <dispatcher>INCLUDE</dispatcher>
                         <dispatcher>ERROR</dispatcher>
                         </filter-mapping>
                         <filter-mapping>
                         <filter-name>extensionsFilter</filter-name>
                         <servlet-name>Faces Servlet</servlet-name>
                         </filter-mapping>
                        
                        
                         <session-config>
                         <!-- A longer session allows the RichFaces JS to run more smoothly. -->
                         <session-timeout>1200</session-timeout>
                         </session-config>
                        
                         <!-- Spring Context loader -->
                         <listener>
                         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                         </listener>
                         <listener>
                         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
                         </listener>
                         <context-param>
                         <param-name>contextConfigLocation</param-name>
                         <param-value>
                         classpath*:eu/europarl/epped/hr/config/spring-all.xml
                         </param-value>
                         </context-param>
                        
                         <!-- Spring-security -->
                         <filter>
                         <filter-name>springSecurityFilterChain</filter-name>
                         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
                         </filter>
                         <filter-mapping>
                         <filter-name>springSecurityFilterChain</filter-name>
                         <url-pattern>/*</url-pattern>
                         <dispatcher>FORWARD</dispatcher>
                         <dispatcher>REQUEST</dispatcher>
                         </filter-mapping>
                        
                         <!-- Spring/Hibernate OpenSession Filter -->
                         <filter>
                         <filter-name>hibernateFilter</filter-name>
                         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
                         </filter>
                        
                         <filter-mapping>
                         <filter-name>hibernateFilter</filter-name>
                         <servlet-name>Faces Servlet</servlet-name>
                         </filter-mapping>
                        
                         <!-- JSF Servlet -->
                         <servlet>
                         <servlet-name>Faces Servlet</servlet-name>
                         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
                         <load-on-startup>1</load-on-startup>
                         </servlet>
                         <servlet-mapping>
                         <servlet-name>Faces Servlet</servlet-name>
                         <url-pattern>*.jsf</url-pattern>
                         </servlet-mapping>
                        
                         <welcome-file-list>
                         <welcome-file>/index.html</welcome-file>
                         </welcome-file-list>
                        
                         <!-- Makes sure that the pages are never accessed directly
                         without going through the *.faces pattern. -->
                         <security-constraint>
                         <display-name>Restrict access to raw pages</display-name>
                         <web-resource-collection>
                         <web-resource-name>Restrict access to raw pages</web-resource-name>
                         <url-pattern>*.xhtml</url-pattern>
                         </web-resource-collection>
                         <auth-constraint>
                         <description>With no roles defined, no access granted</description>
                         </auth-constraint>
                         </security-constraint>
                        
                         <error-page>
                         <exception-type>javax.faces.application.ViewExpiredException</exception-type>
                         <location>/index.html</location>
                         </error-page>
                         <error-page>
                         <exception-type>javax.faces.FacesException</exception-type>
                         <location>/index.html</location>
                         </error-page>
                        
                        </web-app>


                        Thanks you for such a fast reply !

                        • 10. Re: Problem with fileupload class org.richfaces.event.Upload
                          Ilya Shaikovsky Master

                          modify Spring security filter definition to use Faces Servlet by name mapping. Now it's caaled before RF filter and that could cause problems.

                          • 11. Re: Problem with fileupload class org.richfaces.event.Upload
                            John Ba Newbie

                            Doing that prevents me to login in my application with a 404 error on the login processing url. But even when I remove the spring security filter mapping, I get the error.

                            exception
                            
                            javax.servlet.ServletException: FacesEvent of class org.richfaces.event.UploadAjaxActionEvent not supported by UIInput
                             javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:401)
                             javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:221)
                             javax.faces.webapp.FacesServlet.service(FacesServlet.java:156)
                             org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
                             org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
                             org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
                             org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
                             org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
                             org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
                             org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
                             org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
                            
                            root cause
                            
                            java.lang.IllegalArgumentException: FacesEvent of class org.richfaces.event.UploadAjaxActionEvent not supported by UIInput
                             javax.faces.component.UIInput.broadcast(UIInput.java:192)
                             org.richfaces.component.UIFileUpload.broadcast(UIFileUpload.java:221)
                             org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:318)
                             org.ajax4jsf.component.AjaxViewRoot.broadcastAjaxEvents(AjaxViewRoot.java:337)
                             org.ajax4jsf.application.AjaxViewHandler.processAjaxEvents(AjaxViewHandler.java:216)
                             org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:169)
                             org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
                             org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
                             javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
                             org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
                             org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
                             org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
                             org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
                             org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
                             org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
                             org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
                             org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
                            


                            • 12. Re: Problem with fileupload class org.richfaces.event.Upload
                              John Ba Newbie

                              And actually, the upload is working perfectly because when a debug a can see the file I'm uploading in the listener method.

                              It's just that exception that is thrown...