从faces-config运行servlet

时间:2011-01-12 00:11:24

标签: java jsf servlets

很难解释.. 所以,在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 Servlet运行(因此对于每个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><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仍无效 我试图添加到faces-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 :(得分:0)

<h:form>替换为<form>,以便您可以使用action属性。

或者,不要使用servlet,而只是使用JSF方式的托管bean操作。您只需要相应地实现该本地decode()组件的x:upload,它将过滤器收集的上载文件作为bean属性。或者,如果这工作太多,只需重用现有的JSF文件上传组件,如Tomahawk的t:inputFileUpload。如何使用它可以在this article中找到。