Запуск сервлета из лиц-конфиг - PullRequest
0 голосов
/ 12 января 2011

Это будет сложно объяснить. Итак, в 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>.Итак, я изменил атрибут «action» на «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 все еще не работает .. Я пытался добавить в Face-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>

но это не дает результата .. Есть идеи?

1 Ответ

0 голосов
/ 12 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...