2011-01-12 6 views
0

Es wird schwer sein, zu erklären .. Also, in a.jsp Ich habe so etwas wie dies:Lauf Servlet von Gesichter-config

<h:form enctype="multipart/form-data" > 
        <td><input type="text" name="imgName" value="" size="7"/></td> 
        <td><input type="text" name="imgDesc" value="" size="30"/></td> 
        <td> 
         <x:upload target="/upload/#{loginBean.user.login}/#{loginBean.user.filesUploaded}_image.jpg"/> 
        </td> 
        <td>        
         <h:commandButton value="Send" action="submit"/> 
        </td> 
        </h:form> 

nun die Taste "Senden" Filter laufen wird, weil (wie ich annehme) dieser Filter läuft für jedes Faces-Servlet (also für jedes JSP?). Meine web.xml-Datei:

<filter> 
     <filter-name>Upload Filter</filter-name> 
     <filter-class>DomainModels.Adds.UploadFilter</filter-class> 
     <init-param> 
     <param-name>sizeThreshold</param-name> 
     <param-value>1024</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>Upload Filter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 

Wie kann ich das Ausführen von Servlet nach dem Filtern erzwingen? Ich habe irgendwo gelesen, dass ich einfach <servlet> und <servlet-mapping> schreiben muss. Ok, also habe ich geändert „action“ Attribut „TestServlet.do“, ergänzte diesen:

<servlet> 
     <servlet-name>TestServlet</servlet-name> 
     <servlet-class>DomainModels.Adds.AddImage</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>TestServlet</servlet-name> 
     <url-pattern>/TestServlet.do</url-pattern> 
    </servlet-mapping> 

aber immer noch mein TestServlet nicht funktioniert .. Ich habe versucht, in hinzufügen faces-config.xml dies:

<navigation-rule> 
    <from-view-id>/upload/a.jsp</from-view-id> 
    <navigation-case> 
     <from-outcome>submit</from-outcome> 
     <to-view-id>/TestServlet.do</to-view-id> 
    </navigation-case> 
    </navigation-rule> 

aber es gibt kein Ergebnis .. Irgendwelche Ideen?

Antwort

0

Ersetzen Sie <h:form> durch <form>, so dass Sie das action Attribut verwenden können.

Alternativ verwenden Sie kein Servlet, sondern nur eine verwaltete Bean-Aktion auf JSF-Basis. Sie müssen nur decode() dieser homegrown x:upload Komponente implementieren, die die hochgeladene Datei, die von dem Filter als eine Bean-Eigenschaft gesammelt wird, setzt. Oder wenn das zu viel Arbeit ist, verwenden Sie einfach eine vorhandene JSF-Datei-Upload-Komponente wie Tomahawks t:inputFileUpload. Wie man es benutzt, kann in this article gefunden werden.

+0

Also, wenn ich etwas tun will, muss ich es nur in decode() Methode platzieren? Ich habe so etwas in meinem Code, und (wenn ich es richtig verstehe) wird es verwendet, um hochgeladene Datei vom Filter zu speichern. Aber kann ich Werte von Bohnen bekommen? – Seraphis