2011-01-12 3 views
0

Это будет трудно объяснить .. Так, в a.jsp у меня есть что-то вроде этого:Запуск сервлета из граней-конфигурации

<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> 

Теперь при нажатии кнопки «Отправить» будет работать фильтр, потому что (как я полагаю), что фильтр запускается для каждого сервлеля Faces (поэтому для каждого jsp?). Мой файл web.xml:

<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> 

Как заставить принудительно запускать сервлет после фильтрации? Я где-то читал, что мне нужно написать простые <servlet> и <servlet-mapping>. Итак, я изменил «действие» атрибут к «TestServlet.do», добавил:

<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> 

, но до сих пор мой TestServlet не работает .. Я пытался добавить в лицах-config.xml это:

<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> 

но это не дает никакого результата .. Любые идеи?

ответ

0

Замените <h:form> на <form>, чтобы вы могли использовать атрибут action.

В качестве альтернативы, не используйте сервлет, а просто используйте управляемое bean-действие JSF. Вам нужно всего лишь реализовать decode() этого доморощенного компонента x:upload, чтобы он помещал загруженный файл, который был собран фильтром в качестве свойства компонента. Или, если это слишком много, просто повторно используйте существующий компонент загрузки файлов JSF, например, Tomahawk's t:inputFileUpload. Как его использовать, вы можете найти в this article.

+0

Так что, если я хочу что-то сделать, мне просто нужно поместить его в метод decode()? В моем коде есть что-то подобное, и (если я правильно понимаю), он используется для сохранения загруженного файла из фильтра. Но смогу ли я получить значения из бобов? – Seraphis

Смежные вопросы