2013-05-18 30 views
2

我需要利用Struts标签支柱无段式标签

<s:form action="doUpload" method="post" enctype="multipart/form-data"> 
    <s:file name="upload" label="File"/> 
    <s:submit/> 
</s:form> 

2文件上传到利用File upload功能,支柱2提供?如果没有struts 2标签,我可以实现相同的功能吗?如果是的话,我是否可以知道这些约定需要结合到行动或配置文件中才能实现?

+2

请注意,仅查看呈现的HTML会为您回答这些问题。最终所有的表单标签都为你呈现HTML。 –

回答

1

不久,是的,你可以。然后操作使用的配置和约定保持不变。

如果使用<form标记,则应该将action属性值与映射到该操作的路径一起放置。有关动作映射器如何工作并将路径转换为ActionMapping的更多信息,请参阅here

在表单标签中,您应该放置enctype="multipart/form-data",以便Struts能够将http请求包装为MultipartRequestWrapper并解析表单数据。然后fileUpload拦截器将参数添加到拦截器所需的动作上下文中,以将文件属性注入处理上传的操作。

input标记的名称应该对应于属性File类型的名称。它被上面的两个拦截器使用,最后通过OGNL注入对象。

如果您需要多个文件上传,那么您应该更改属性类型以便能够处理一组对象。看起来这是在example中完成的。

0

offcorse你可以,你可以使用HTML标签,

<s:form action="fileUploadAction" method="post" enctype="multipart/form-data"> 

    <input type="file" name="userImage" id="userImage"/> 

</s:form> 

可以使用的struts2-inceptors做的事情为你这样的。

<interceptors> 
      <interceptor name="mylogging" 
       class="com.alw.controller.MyLoggingInterceptor"> 
      </interceptor> 
      <interceptor-stack name="loggingStack"> 
       <interceptor-ref name="mylogging" /> 
       <interceptor-ref name="defaultStack" /> 
      </interceptor-stack> 
     </interceptors> 

     <action name="fileUploadAction" 
      class="xxx.xxx.FileUploadAction" method="filterUploadFile"> 
      <interceptor-ref name="fileUpload"> 
      <param name="maximumSize">2097152</param> 

      </interceptor-ref> 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">JSP_Pagesxxx.jsp</result/> 
     </action> 

并在您的操作类中执行业务逻辑,您需要此操作。

public class FileUploadAction extends ActionSupport implements ServletRequestAware 
{ 
    private File userImage; 
    private String userImageContentType; 
    private String userImageFileName; 

    public String filterUploadFile() 
     { 
     if(UserImageFileName()!=null) 
     { 

       // perform your business logic 
     } 
     } 

}