如何使用Struts2使用文件和文本字段提交multipart / form-data?

时间:2014-12-08 00:43:29

标签: java jsp file-upload struts2 multipartform-data

此注册表包含文件上传和文本字段。使用Struts2我们如何提交表单参数并上传文件?

1。 register.jsp

<s:form action = "Register" enctype="multipart/form-data" method="post">
    <s:textfield name="uname" label = "User Name"/>  
    <s:password name ="password" label = "Password"/>
    <s:file name="fileUpload" label="Select a File to upload" size="40" />
    <s:submit/> 
</s:form>

2。 RegisterAction

package user.action;

import java.io.File;

public class RegisterAction 
{
    private String uname,password;
    private File fileUpload;
    private String fileUploadContentType;
    private String fileUploadFileName;

    //getter setters

    public String execute() throws Exception
    {
        return "success";
    }
}

3。 struts.xml

</action>
<action name="Register" class="user.action.RegisterAction">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">text/plain</param>
        <param name="maximumSize">10240</param>
    </interceptor-ref> 
    <result name="success">registered.jsp</result>
</action>

4。 registered.jsp

User Name    : <s:property value="uname"/>
File Name    : <s:property value="fileUploadFileName"/> 
Content Type : <s:property value="fileUploadContentType"/> 
File         : <s:property value="fileUpload"/> 

用户名<s:property value="uname"/>未提供任何输出 registered.jsp。我们应该使用Apache文件上传来解析请求以获取textfields值吗?

3 个答案:

答案 0 :(得分:1)

检查你的setter方法局部变量,并在registered.jsp中试试这个 改变

User Name <s:property value="uname"/>

<s:label name="xyz" value="%{uname}" />

答案 1 :(得分:1)

不,你不应该。 Apache文件上传是Struts2的一部分。 fileUpload拦截器已包含在defaultStack中,因此您无需在操作配置中引用它。如果你想覆盖这个拦截器的参数,那么

<action name="Register" class="user.action.RegisterAction">
    <interceptor-ref name="defaultStack">
        <param name="fileUpload.allowedTypes">text/plain</param>
        <param name="fileUpload.maximumSize">10240</param>
    </interceptor-ref> 
    <result name="success">registered.jsp</result>
</action>
  

只要将所需的库添加到项目中,您就可以利用Struts 2 fileUpload功能。

答案 2 :(得分:0)

感谢朋友们调查此问题。 我有答案。实际上我在添加拦截器时犯了一个错误。 我错过了

<interceptor-ref name="defaultStack"></interceptor-ref>

所以我改变后的新动作应该是

  <action name="Register" class="user.action.RegisterAction">
        <interceptor-ref name="fileUpload">
            <param name="allowedTypes">text/plain</param>
            <param name="maximumSize">10240</param>
        </interceptor-ref> 
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <result name="success">registered.jsp</result>
    </action>

Roman先生是正确的,我们应该只在我们需要覆盖的时候添加文件上传拦截器。如果我们还没有上传。