在struts前面加自定义的过滤器后,action中获取不到参数
我的Jsp页面需要用到多文件上传,用的是uploadify,遇到个问题uploadify结合struts2和spring后,在后台fileList = upload.parseRequest(request);这一句报空,原因是request已经被struts解析为MultipartRequestWrapper类型,不能再次解析了所以无法获取到前台上传的fileList。我在网上找了很多解决方法都不管用,后来发现一种方法:在struts前面加一个filter,让所有的请求都经过这个filter后再进入到struts的filter,在自定义filter中,不让struts将request解析成MultipartRequestWrapper,于是解决了后台获取不到fileList的问题。
但是随之而来了新的问题:前台传过来的参数没了,set方法也没起作用,是自定义过滤器引起的,但我不知该如何解决!
web.xml中的代码:
<filter>
<filter-name>uploadFilter</filter-name>
<filter-class>com.taiji.jdxt.filter.UploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>uploadFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
在struts前添加的filter类:
public class UploadFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new StrutsRequestWrapper((HttpServletRequest) request), response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
uploadify的代码,其中 'formData' : { 'sid' : $(this).attr("id") },就是后台需要获取的参数:
$(function(){
$(".uploadfiles").each(function(){
$(this).uploadify(
{
'swf' : 'blue_theme/uploadify/uploadify.swf',
'uploader' : 'receiveFile.action', // 上传到后台的处理类
'cancelImg' : 'blue_theme/uploadify/cancel.png', // 取消按钮的图片
'fileObjName' : 'uploadify', // 传到后台的对象名
'fileTypeDesc' : '请选择文件',
'fileTypeExts': '*',
'fileSizeLimit' : '8589934592', // 限制文件上传的大小
'buttonText' : '选择文件', // 按钮上的文字
'auto' : true, // 是否自动上传
'multi' : true, // 是否支持多文件上传
'method' : 'GET',
'formData' : { 'sid' : $(this).attr("id") },
'removeComplete' : true,
'removeTimeout' : 3,
});
});
});