我尝试使用Struts2上传文件(图像)。但是,我的文件、文件内容和文件名类型的值为空!我试图寻找这个问题,但没有任何结果。
这就是我想做的:
jsp:
<s:form id="registerSubmit" method="post" enctype="multipart/form-data" theme="bootstrap">
<s:textfield name="tel" cssClass="form-control" label="tel :"></s:textfield>
<label for="myFile">Upload your file</label>
<input type="file" name="file" />
<button type="submit" id="submit" > Enregistrer</button>
</s:form>
行动:
public class Gestion extends ActionSupport implements SessionAware, ModelDriven{
private Visit c;
private Service Service;
private Long tel;
private File file;
private String fileContentType;
private String fileFileName;
public String addvisit(){
c = new visit();
Service = new ServiceImpl();
c.setTel(tel);
System.out.println(fileContentType); //null
System.out.println(fileFileName); //null
byte[] bFile = null;
if(file != null)
bFile = new byte[(int) file.length()];
c.setPhoto(bFile); // null
Service.add(c);
return "success";
}
//setters and getters
}
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="10000000" />
<package name="login" extends="struts-default" namespace="/">
<action name="addvisit" class="action.Gestion"
method="addvisit">
<interceptor-ref name="fileUpload">
<param name="maximumSize">2097152</param>
<param name="allowedTypes">
image/png,image/gif,image/jpeg,image/pjpeg
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success" type="json" >
<param name="root">map</param>
</result>
</action>
</package>
</struts>
您没有指向表单中的任何位置的操作。
我还建议您尽可能使用(自封闭)Struts标记:
<s:form action="addvisit" id="registerSubmit" method="post"
enctype="multipart/form-data" theme="bootstrap">
<s:textfield name="tel" cssClass="form-control" label="tel :" />
<s:file name="file" label="Upload your file" />
<s:submit id="submit" value="Enregistrer" />
</s:form>
也就是说,您的错误99%与模型驱动有关。删除模型驱动接口实现,或将堆栈配置为在模型驱动拦截器之后具有文件上传拦截器,就像在默认堆栈中一样(您实际上使用了两次文件上传拦截器):
<action name="addvisit" class="action.Gestion" method="addvisit">
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">2097152</param>
<param name="fileUpload.allowedTypes">
image/png,image/gif,image/jpeg,image/pjpeg
</param>
</interceptor-ref>
<result name="success" type="json" >
<param name="root">map</param>
</result>
</action>
主要内容:Struts2框架的拦截器:,如何使用拦截器?,创建自定义的拦截器,创建拦截器类:,创建动作类:,创建视图,创建页面:,配置文件,堆叠多个拦截器:拦截器的概念是Servlet过滤器或JDK代理类一样的。拦截器允许横切功能分开实现的动作,以及框架。使用拦截器,可以实现如下: 提供预处理行动之前被称为逻辑。 提供后处理逻辑动作后被调用 捕获异常,这样可以进行替代处理。 Struts2框架提供的许多功能都使用拦截实现的例子包括异常处理,文件上传,生命周期回调和验证等事实上作为Struts2的
主要内容:1. 动作,2. JSP页面,3. 执行和等待拦截器,4. 示例,参考在Struts2中附带一个名为“execAndWait”一个非常有趣的“执行和等待”拦截器,这是一个非常方便的拦截器长时间运行操作在后台,显示用户的自定义的等待页面。在本教程中,它显示了一个完整的使用 Struts2 execAndWait 拦截器的例子。 1. 动作 一个普通的动作类,有一个长时间运行进程,证明了execAndWait效果。 LongProcessAction.java 2. J
本文向大家介绍详解Struts2拦截器机制,包括了详解Struts2拦截器机制的使用技巧和注意事项,需要的朋友参考一下 Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的。比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求参数设置成action中对应的属性的param拦截器等。总之,在整个Struts
主要内容:参考很多时候,相同的一组拦截器可以适用于不同的动作类,例如, 在上述情况下,它有许多重复工作以及不能重复使用。 幸运的是,在Struts 2自带的拦截器栈,使开发人员建立一组拦截到一个单元名为“栈名字”, 和可以通过“栈名字”引用操作它。 最佳做法 建议组合相同的一组拦截器到一个拦截器栈摆脱重复的工作,并增加了项目的可重用性。 在上面的例子更新,声明一个拦截器栈,命名为“defaultStackWit
主要内容:参考在Struts2中,可以设置或通过普通的<param>标签重写拦截器的参数。见下面的例子: 然而,在上面的代码片段,动作类被声明为自己的拦截器, 它会导致继承“defaultStack”拦截器的直接丢失。 如果你想保持“defaultStack”拦截器,并覆盖工作流的excludeMethods参数呢?没问题,试试这个: 上面的代码片段将保持“defaultStack”拦截并覆盖“workflow
我一直在阅读Struts2文档中的,它讨论了如何将StoreInterceptor添加到中的操作定义中,并且它很管用。但如果您要从操作中创建和添加,则情况就是如此。 我的问题是,我正在使用进行登录,如果登录失败,它将添加一个,如下所示: 它添加得很好,但当我进入在之后调用的LoginAction时,为。 我认为通过像这样添加,它将在请求或会话中存储(使用或参数): 但不管用。我还尝试将直接添加到d