此注册表包含文件上传和文本字段。使用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值吗?
答案 0 :(得分:1)
检查你的setter方法局部变量,并在registered.jsp中试试这个 改变
User Name <s:property value="uname"/>
与
<s:label name="xyz" value="%{uname}" />
答案 1 :(得分:1)
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先生是正确的,我们应该只在我们需要覆盖的时候添加文件上传拦截器。如果我们还没有上传。