1 2 Previous Next 22 Replies Latest reply: Dec 5, 2013 5:57 AM by Gustavo Ehrhardt RSS

Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file

David Lee Newbie

Hi --

 

When I just trying to put the demo code to my project:

 

XHTML:

<h:outputStylesheet>
        .top {
        vertical-align: top;
        }

        .info {
        height: 202px;
        overflow: auto;
        }
    </h:outputStylesheet>
    <h:form>
        <h:panelGrid columns="2" columnClasses="top,top">
            <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}" id="upload"
                onbegin="alert('go!');" onfileselect="alert('selected');" onfilesubmit="alert('submit');"
                ontyperejected="alert('Only JPG, GIF, PNG and BMP files are accepted');" >
                <a4j:ajax event="uploadcomplete" execute="@form" oncomplete="alert('complete!');" />
            </rich:fileUpload>
        </h:panelGrid>
    </h:form>

 

JAVA:

import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.ArrayList;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.richfaces.event.FileUploadEvent;
import org.richfaces.model.UploadedFile;

@Name("fileUploadBean")
@Scope(ScopeType.SESSION)
public class FileUploadBean implements Serializable {
   
    private static final long serialVersionUID = 8378624613118068502L;
    private ArrayList<UploadedImage> files = new ArrayList<UploadedImage>();

    public void paint(OutputStream stream, Object object) throws IOException {
        stream.write(getFiles().get((Integer) object).getData());
        stream.close();
    }

    public void listener(FileUploadEvent event) throws Exception {
        UploadedFile item = event.getUploadedFile();
        UploadedImage file = new UploadedImage();
        file.setLength(item.getData().length);
        file.setName(item.getName());
        file.setData(item.getData());
        files.add(file);
    }

    public String clearUploadData() {
        files.clear();
        return null;
    }

    public int getSize() {
        if (getFiles().size() > 0) {
            return getFiles().size();
        } else {
            return 0;
        }
    }

    public long getTimeStamp() {
        return System.currentTimeMillis();
    }

    public ArrayList<UploadedImage> getFiles() {
        return files;
    }

    public void setFiles(ArrayList<UploadedImage> files) {
        this.files = files;
    }
   
    public class UploadedImage {
        private int length;
        private String name;
        private byte[] data;

        public int getLength() {
            return length;
        }

        public void setLength(int length) {
            this.length = length;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public byte[] getData() {
            return data;
        }

        public void setData(byte[] data) {
            this.data = data;
        }
    }
}

 

I got problem, after I select a file for upload, and there is no reaction.

 

Like following image:

notWorkingFileUploader.png

 

The progress bar is blank.

 

And via firebug can see it's keep sending request.

But the return value always "0" --

So it never get finish.

 

Any other settings I'll need to add to some where?

Please I need some help, thanks a lot

  • 1. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Brian Leathem Master

    I take it you are following the fileupload sample from the showcase?

    http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=fileUpload&skin=blueSky

     

    Did you follow the tip at the bottom of the sample page?

    FileUpload requires two context-parameter's to be set in web.xml:

    1. createTempFiles boolean attribute which defines whether the uploaded files are stored in temporary files or available in the listener directly as byte[] data (false for this example).
    2. maxRequestSize attribute defines max size in bytes of the uploaded files (1000000 for this example).
  • 2. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    I added following lines in my web.xml,

    is that correct?

     

    <context-param>
      <param-name>maxRequestSize</param-name>
      <param-value>2000000000000</param-value>
    </context-param>
    <context-param>
      <param-name>createTempFiles</param-name>
      <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>org.richfaces.resourceOptimization.enabled</param-name>
        <param-value>true</param-value>
    </context-param>
    

     

     

    Thanks!

  • 3. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Brian Leathem Master

    David Lee wrote:

     

    is that correct?

     

    Did it work?

     

    If it doesn't, be sure your app server has permissions to write the file to whatever folders it's trying to write to.

  • 4. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    Sorry, I think still not working.

    And seems the "public void listener(FileUploadEvent event)" never get trigger too.

     

    If that should trigger when file selected or finish uploaded?

     

    Another question is about the permissions of folders, any place outside the listener (ex.web.xml context-param) I will be able to setup the path?

     

    Thanks

  • 5. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    If that's possible there are some problem in my pom.xml?

     

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.runtime.path>${project.basedir}/src/main/webapp/WEB-INF/lib</project.runtime.path>
            <org.richfaces.bom.version>4.3.4.Final</org.richfaces.bom.version>
    </properties>
    
    <dependency>
                <groupId>org.richfaces</groupId>
                <artifactId>richfaces-bom</artifactId>
                <version>${org.richfaces.bom.version}</version>
                <scope>provided</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.richfaces.ui</groupId>
                <artifactId>richfaces-components-ui</artifactId>
                <version>${org.richfaces.bom.version}</version>
            </dependency>
            <dependency>
                <groupId>org.richfaces.core</groupId>
                <artifactId>richfaces-core-impl</artifactId>
                <version>${org.richfaces.bom.version}</version>
            </dependency>
            <dependency>
                <groupId>com.sun.faces</groupId>
                <artifactId>jsf-api</artifactId>
                <version>2.1.7</version>
                <scope>compile</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
            </dependency>
    
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>1.0.0.GA</version>
            </dependency>
    
            <dependency>
                <groupId>org.jboss.seam</groupId>
                <artifactId>bom</artifactId>
                <version>2.3.1.Final</version>
                <type>pom</type>
                <scope>provided</scope>
            </dependency>
    
    
  • 6. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    Web.xml as following:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" metadata-complete="true" version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <!-- Web session timeout in minutes.  In JBoss AS 6, we had kept this setting in
    <$JBOSS_HOME/server/default/deploy/jbossweb.sar/web.xml -->
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>
    <context-param>
      <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
      <param-value>true</param-value>
    </context-param>
    <!-- facelets -->
    <context-param>
      <!-- facelets.DEVELOPMENT parameter:
          true: Prints debug info for errors.
          false:Removes extra overhead at production environment.
        -->
      <param-name>facelets.DEVELOPMENT</param-name>
      <param-value>false</param-value>
    </context-param>
    <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.xhtml</param-value>
    </context-param>
      <!-- facelets.REFRESH_PERIOD parameter:
          When a page is requested, what interval in seconds should the compiler check for changes.
          If you don't want the compiler to check for changes once the page is compiled, then use a value of -1.
          Setting a low refresh period helps during development to be able to edit pages in a running application.
          Setting it to -1 has the effect of fixing problem of discarded AJAX requests/flushing components when server
          time has been changed.
    
          IMPORTANT! We lose the ability to modify xhtml files on the fly, however.
          Recommendation: Remove this parameter in development mode.
      -->
      <context-param>
        <param-name>facelets.REFRESH_PERIOD</param-name>
        <param-value>-1</param-value>
      </context-param>
      <context-param>
        <!-- facelets.SKIP_COMMENTS parameter:
            true: Do not render comments (for production).
            false: Render comments.
        -->
        <param-name>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
      </context-param>
    <!-- Making the RichFaces skin spread to standard HTML controls -->
    <context-param>
      <param-name>org.richfaces.CONTROL_SKINNING</param-name>
      <param-value>enable</param-value>
    </context-param>
    <!-- richfaces
    
    This JSF richfaces optimization tip will make sure that all the javascript,
    files & libraries assosiated with richfaces should be
    downloaded at client side at the time of first request from client.
      -->
    <context-param>
      <param-name>org.richfaces.LoadScriptStrategy</param-name>
      <param-value>ALL</param-value>
    </context-param>
    <!--
    This configuration will make sure that all style related
    files should be loaded at client side at once on first request
    when richfaces application is accessed.
      -->
    <context-param>
      <param-name>org.richfaces.LoadStyleStrategy</param-name>
      <param-value>ALL</param-value>
    </context-param>
    <filter>
      <filter-name>Seam Filter</filter-name>
      <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
    </filter>
    <filter>
      <filter-name>Seam Multipart Filter</filter-name>
      <filter-class>org.jboss.seam.web.MultipartFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>Seam Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
      <filter-name>Seam Multipart Filter</filter-name>
      <url-pattern>*.seam</url-pattern>
    </filter-mapping>
      <listener>
      <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>
    <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
      <servlet-name>Seam Resource Servlet</servlet-name>
      <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
    </servlet>
      <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.seam</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>Seam Resource Servlet</servlet-name>
      <url-pattern>/seam/resource/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>saveconfigure</servlet-name>
      <url-pattern>/saveconfigure</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
      <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <error-page>
      <error-code>404</error-code>
      <location>/home.seam</location>
    </error-page>
    <security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTPs</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    <security-constraint>
      <display-name>Restrict raw XHTML Documents</display-name>
      <web-resource-collection>
      <web-resource-name>XHTML</web-resource-name>
      <url-pattern>*.xhtml</url-pattern>
      </web-resource-collection>
      <auth-constraint/>
    </security-constraint>
    </web-app>
    
  • 7. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Brian Leathem Master

    This is a lot to read through, and most of it is irrelevant.  Can you provide a http://sscce.org/ example demonstrating the problem?

  • 8. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    Sorry, since our project was really fat ... it's kind of hard to provide a http://sscce.org/ example

    But we found something in log, if that will be helpful to judge what's going on?

    18:31:18,608 SEVERE [org.richfaces.log.Application] (http--0.0.0.0-443-1) Exception parsing multipart request: Request prolog cannot be read: org.richfaces.exception.FileUploadException: Exception parsing multipart request: Request prolog cannot be read

      at org.richfaces.request.MultipartRequestParser.parse(MultipartRequestParser.java:156) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      at org.richfaces.request.MultipartRequest25.parseIfNecessary(MultipartRequest25.java:77) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      at org.richfaces.request.MultipartRequest25.getParameter(MultipartRequest25.java:114) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      at com.sun.faces.context.RequestParameterMap.get(RequestParameterMap.java:75) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at com.sun.faces.context.RequestParameterMap.get(RequestParameterMap.java:56) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at java.util.Collections$UnmodifiableMap.get(Collections.java:1339) [rt.jar:1.7.0_10]

      at com.sun.faces.application.view.MultiViewHandler.calculateRenderKitId(MultiViewHandler.java:214) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at org.jboss.seam.jsf.SeamViewHandler.calculateRenderKitId(SeamViewHandler.java:73) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at javax.faces.application.ViewHandlerWrapper.calculateRenderKitId(ViewHandlerWrapper.java:155) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]

      at com.sun.faces.context.FacesContextImpl.isPostback(FacesContextImpl.java:211) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at javax.faces.context.FacesContextWrapper.isPostback(FacesContextWrapper.java:402) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]

      at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:188) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar(inlove)

      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]

      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar(inlove)

      at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:86) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar(inlove)

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) [jboss-seam-2.3.1.Final.jar:2.3.1.Final]

      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489) [jbossweb-7.0.13.Final.jar(inlove)

      at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]

      at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]

      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar(inlove)

      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar(inlove)

      at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_10]

    Caused by: java.io.IOException: Request prolog cannot be read

      at org.richfaces.request.MultipartRequestParser.readProlog(MultipartRequestParser.java:270) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      at org.richfaces.request.MultipartRequestParser.initialize(MultipartRequestParser.java:172) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      at org.richfaces.request.MultipartRequestParser.parse(MultipartRequestParser.java:148) [richfaces-components-ui-4.3.4.Final.jar:4.3.4.Final]

      ... 49 more

  • 9. Re: Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Brian Leathem Master

    Try adding:

     

    <web:multipart-filter disabled="true" />
    

     

    as per the discussion here:

    https://community.jboss.org/thread/204810

     

    It turns out that Seam installs a filter by default for multipart forms (to support s:fileUpload) that interferes with the Richfaces multipart filter.  To solve this problem simply add the following to your components.xml to disable the Seam multipart filter and the rich:fileUpload will work.

  • 10. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Jean-Philippe VILLEMIN Newbie

    I'm facing the same problem... I use the code post on the showcase but i'm not using seam. I'm working on Tomcat 7. Did you have an idea how i could resolve the problem?

     

    Is this about a Filter declared in the web.xml...because i'm using Spring security Filter,  PrettyFaces filter... it makes a lot and maybe there is a mutlipart-filter inside them to disabled...I don't know...

     

    Thanks.

  • 12. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Jean-Philippe VILLEMIN Newbie

    Yep,

     

    I already ask the question on stackoverflow and i did post a stacktrace there

     

    Nothing in the listener method is printed.

     

    And extension file checking is never done neither and it never send back popup as showed in the showcase when you try to upload a file with an extension not listed.

  • 13. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    David Lee Newbie

    Unfortunately I didn't solve this issue on my side yet

    Just because I'm facing some deadline so I working on something and not get chance to try for fileUpload.

    If I got something I'll update that.


  • 14. Re: Richfaces 4.3.3.FINAL rich:fileUpload didn't get upload after selected file
    Jean-Philippe VILLEMIN Newbie

    Ok thanks David, that's a strange behavior...if you change version of richfaces.(4.0) it didn't throws the same error for me...

    I hope maybe Brian could help me on this...

    I think there is a compatibility problem between tomcat and richfaces. I'm not sure about that but i don't think right now that it's a 3rd party library who interacts here. I try to config Tomcat context with set allowCasualMultipartParsing="true". Nothing happens.

    I tried quickly to use h:inputfile from JSF 2.2, whitout sucess too. I will go this way if nobody can't find a solution.

1 2 Previous Next