不经意间的流占用,导致json总为空问题

来源:互联网 发布:和还原精灵类似软件 编辑:程序博客网 时间:2024/04/28 22:30

今天调试了一个Bug,历时7个小时,究其原因,一个是自己水平太菜,另一个可能就是不够仔细和细心吧。

贴上来,与大家分享。

     前台是用easyui写的,其中有一个批量添加的方法,代码如下:

function append() {
var p = parent.dj.dialog({
title : '添加用户',
href : '${pageContext.request.contextPath}/student!studentAdd.do',
width : 640,
height :600,
buttons : [ {
text : '添加',
handler : function() {
var f = p.find('form');
f.form('submit', {
url : '${pageContext.request.contextPath}/student!add.do',
success : function(d) {
var json = $.parseJSON(d);
if (json.success) {
datagrid.datagrid('reload');
p.dialog('close');
}
parent.dj.messagerShow({
msg : json.msg,
title : '提示'
});
}
});
}
} ],
});
}

批量添加成功后,将会重新加载页面,是否成功是根据后台传往前台的一个封装好的json对象中的success的值进行判断,即前台中的if (json.success),后台的添加(add)方法为:

public void add() {
Json j = new Json();
try {
System.out.println("前台过来的学生姓名个数为:"
+ (request.getParameterValues("studentName")).length);
List<Student> students = split();

for (Student student : students) {
String studentPicture = savePic();
student.setStudentPicture(studentPicture);
studentService.save(student);
}
j.setSuccess(true);
j.setMsg("添加成功!");
} catch (ValidateFieldsException e) {
e.printStackTrace();
}

super.writeJson(j);
}

一开始,我前台拿到的json总为空,但是我的传值方法没错

ServletActionContext.getResponse().getWriter().write(json);
ServletActionContext.getResponse().getWriter().flush();

ServletActionContext.getResponse().getWriter().close();  

后来,终于发现,是在savePic()函数(一个上传图片的程序)中有这么一句话

PrintWriter out = response.getWriter(); out.println("上传文件扩展名是不允许的扩展名。");   

把这句话注释掉就好了,我想可能是这句话的out与上面的write引起了覆盖之类的,这只是我的猜测,如有大神愿意指教,小弟十分感谢。

总之,终于调好了,关键在于不能放弃,坚持到底。。。。。

0 0