我使用struts2文件上传,我的动作类包含3个带有getter和setter的私有文件
private File myFile;
private String myFileFileName;
private String myFileContentType;
我有一些需要澄清的内容
我们只传递文件作为参数并将其绑定到 myFile ,那么应用程序如何获取文件名和内容类型?
每当我使用myFileVariableName +" FileName" (如果文件变量是myFile,那么文件名变量是myFileFileName,如果file是xxx,那么文件名是xxxFileName),我得到输出,如果我对这种格式做了任何更改(即myFileVariableName +" FileName& #34;),它变为空。是否必须使用此格式?我可以将它更改为我想要的任何名称吗?如果是这样,那怎么样?
要获取内容类型,我应该使用jst" contentType"或myfileVariableName +" contentType"。它也是强制性的吗?
我假设,如果我使用单独的bean来存储我的请求变量,那么所有参数都绑定到该bean变量。但是在文件上传的情况下,只有文件变量ie, myFile 在这个例子中只在bean中获取和设置。 fileFileName和contentType为null。如果我直接在我的动作类中声明这些变量,那么我得到了值,但每当我使用单独的bean时,只有File变量可以获取和设置,而其他两个都是null。为什么呢?
如果我使用ModelDriven,同样的情况发生,我只能得到File变量而其他两个变量都是null。为什么呢?
我只是扩展" struts-default"在我的struts.xml中没有单独的文件上传配置,因为它在我的问题中没有显示任何效果。
答案 0 :(得分:1)
动作类,声明文件变量来存储用户上传的文件,两个String变量用于存储文件名和内容类型。 fileUpload拦截器将 自动注入上传的文件详情 ,通过设置'X' ContentType()并设置'X' FileName(),确保方法名称拼写正确。
文件上传功能取决于“fileUpload Interceptor”, 确保它包含在Action的堆栈中。幸运的是, 默认堆栈已包含“fileUpload Interceptor”。
字段 userImageContentType 和 userImageFileName 是可选字段。如果提供了这些字段的 setter方法, struts2 将设置数据。这只是为了获取上传文件的一些额外信息。如果提供内容类型和文件名字符串,也请遵循命名标准。名称应为 ContentType 和 FileName 。
例如,如果操作文件中的文件属性是私有文件 uploadedFile,内容类型将被uploadFileContentType和 文件名uploadedFileFileName。
在Struts 2中获取设置行为: 将值分配给变量,而不是属性值。 例如,
public class SetTagAction extends ActionSupport{
private String msg;
public String setMsg(String msg) {
this.msg = msg;
}
<s:set var="msg" value="%{'this is a message'}" />
许多Struts 2开发人员认为 set tag var =“msg”会通过setMsg()方法将值分配给关联的操作类。
这是错误的,set标签不会调用setMsg()方法,它只会将“value”赋给名为“msg”的变量,而不是action的属性值。