问题描述:
在使用struts2中上传文件时,在框架中本身给我们设置了一个限制大小。如果上传的文件超过这个大小,在拦截器中就返回了,并且这个错误提示是系统内置的,放在Action级别的Error当中。这个错误非常不友好,需要我们自己替换掉。下面的代码做到了,但出现了一个问题,看看哪位能够解决掉?
1、首先先说如何解决掉系统内置的ActionError,就是重写addActionError方法(见下面代码中)。
2、下面,问题出现了:我有一个验证方法,防止所有内容为空的验证,方法名见下面代码中validateAuthImgUpload方法(这是一个多动作控制器的验证),在这个方法当中判断页面的内容为空时,添加一个addActionError信息。这时,按上面的前提,文件上传时超出了系统的大小限制,拦截器拦截之后,将我修改的后的友好的提示放了进去,同时,它还将所有的提交的页面的内容置空了。然后又添加了validateAuthImgUpload方法的ActionError进去(这个地方我不明白,为什么validateAuthImgUpload方法能够执行,拦截中有错误了,按说是不执行了才对,但它的确是将这个方法当中的错误信息放进了ActionError当中),这时加上第一个错误,就有两个错误了,在页面一下子就显示出两个错误提示给用户,这种提示是不对的,哪位大侠能帮忙解决?
package com.test.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.FileCopyUtils;
import com.test.service.impl.PicUpLoadImpl;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class PicUpAction extends ActionSupport {
Logger logger = LoggerFactory.getLogger(PicUpAction.class);
private PicUpLoadImpl picUpLoad;
private String picName;
private File pic;
private String picFileName;
private String picContentType;
public void setPicUpLoad(PicUpLoadImpl picUpLoad) {
this.picUpLoad = picUpLoad;
}
public String getPicName() {
return picName;
}
public void setPicName(String picName) {
this.picName = picName;
}
public File getPic() {
return pic;
}
public void setPic(File pic) {
this.pic = pic;
}
public String getPicFileName() {
return picFileName;
}
public void setPicFileName(String picFileName) {
this.picFileName = picFileName;
}
public String getpicContentType() {
return picContentType;
}
public void setpicContentType(String picContentType) {
this.picContentType = picContentType;
}
/*
* 上传验证码图片
* @param
*/
public StringauthImgUpload() {
InputStream picStream;
byte[] byt = new byte[0];
try {
picStream = new FileInputStream(pic);
byt = FileCopyUtils.copyToByteArray(picStream);
picStream.close();
if(byt.length>1048576){
this.clearActionErrors();
this.addActionError("上传图片超过1M大小限制");
return "input";
}
} catch (FileNotFoundException e1) {
this.clearActionErrors();
this.addActionError("上传文件没有找到,正确选择文件");
logger.error("上传的文件没有找到"+e1.getMessage());
} catch (IOException e) {
this.clearActionErrors();
this.addActionError("IO Exception");
logger.error("上传文件读取错误"+e.getMessage());
}
int flag = this.picUpLoad.upload("", picName, byt);
if(flag==1){
return "authimgupok";
}else{
return ActionSupport.INPUT;
}
}
public void validateAuthImgUpload() {//validate()验证方法
if("".equals(picName)|| picName==null||pic == null){//验证不能为空
//this.clearActionErrors();
//这个地方清也不对,不清也不对
this.addActionError("请输入图片名称并选择上传文件");
}else{
String fileName = this.getPicFileName();
//取到文件名
int index = fileName.indexOf(".");
//找到点号,准备取后缀名
String fix = fileName.substring(index+1);
if(!("jpg".equals(fix)||"png".equals(fix)||"bmp".equals(fix)||"gif".equals(fix))){
this.clearActionErrors();
this.addActionError("图片只能是gif/jpg/png/bmp 格式");
}
}
}
@Override
public void addActionError(String anErrorMessage) {//这个是重写的addActionError的方法,去掉系统的提示,使用自已的
if(anErrorMessage.startsWith("Request exceeded allowed size limit")){
super.addActionError("上传图片超过1M大小限制");
}else{
super.addActionError(anErrorMessage);
}
}
}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)