webwork里上传文件比较方便,几行代码就可以完成。
只是有个小问题,就是当form里的file控件没有选文件的时提交action
就会出现异常,通常很多应用中不一定非要带文件上传的,这个应该
算webwork一个bug吧。
从报错的地方可以查出是在fileupload拦截器中
String[] fileName = multiWrapper.getFileNames(inputName);
这一行开始中断掉的
就是multiWrapper.getFileNames(inputName);中出现空指针错误
如果webwork.properties中配置的是pell上传包
需要找到PellMultiPartRequest这个类的以下方法
//--------------------------------------------------------------------------------------
public String[] getFileNames(String fieldName) {
// TODO - not sure about this - is this the filename of the actual file or
// TODO - the uploaded filename as provided by the browser?
// TODO - Not sure what version of Pell this class uses as it doesn't seem to be the latest
//这里倒是说明了条件,就是不知道为什么还这么做
return new String[]{multi.getFile(fieldName).getName()};
}
---------------------------------------------------------------------------------------//
可以看到
multi.getFile(fieldName).getName()如果文件为空肯定会报错的
可以先修改成以下方式
//---------------------------------------------------------------------------------------
public String[] getFileNames(String fieldName) {
if(multi.getFile(fieldName)!=null) //多加一个判断
return new String[]{multi.getFile(fieldName).getName()};
else
return new String[]{};
}
----------------------------------------------------------------------------------------//
这样form里file不选文件就不在出异常了
用cos上传处理方法一样
除上面方法
还修改fileupload拦截器也可以解决
String[] fileName = multiWrapper.getFileNames(inputName);
找到这行
然后修改成下面样子
//-----------------------------------------------------------------------------------
String[] fileName =null;
try{
fileName = multiWrapper.getFileNames(inputName);
}catch(Exception ex){
//file is null
}
-----------------------------------------------------------------------------------//