您的位置:首页 > 编程语言 > Java开发

struts2文件上传类型和大小提示信息问题

2012-11-08 21:36 393 查看
struts2文件上传问题。

之前的博客中针对struts2上传做了介绍,其中就strut2文件上传类型和大小限制做了介绍,基本满足了文件上传的功能。但是上传文件类型不对或者文件超出了大小限制,服务器就会直接报出异常信息,有时会在页面直接打出,有时仅后台报错,而前台没有反应。当然了这都是不是我们想要的,尤其是在前台页面打印出异常信息,这是不能让人容忍的。当然struts也给我们提供了解决的办法,在struts2的核心包中default.properties配置文件中有一项配置

# struts.custom.i18n.resources=testmessages,testmessages2,默认情况下时禁用的,我们可以再struts.xml的配置文件中来启用它,具体做法加入如下语句:

<constant name="struts.custom.i18n.resources" value="resource"></constant>

其中resource为相对应的配置文件,我们要新建一个resource.properties文件,里面加入

struts.messages.error.file.too.large=File too Large  这个是文件过大的提示信息

struts.messages.error.content.type.not.allowed=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u4E0A\u4F20\u7684\u6587\u4EF6\u7C7B\u578B\u4E0D\u6B63\u786E这个是文件类型不正确的提示信息这里由于我使用myeclipse添加的,结果中文加入后变成了上面的字符,不过没有关系页面能够正常显示。

做完这些显示是不够的我们要再页面给他一个提示信息显示的地方

jsp页面代码:<s:fielderror name="file"></s:fielderror>

那么到此为止是不是就可以打印提示信息而不是异常信息了呢?答案是否定的,由于出现这种异常时请求还没有到达我们所请求的action就已经返回页面了,那么我们必须在action中给他定义一个result指定其返回的页面,那么这result的name是什么呢,经过我不断的错误调试之后发现这个name为input。我们在action中进行如下配置:

<result name="input">_upload_error.jsp</result> 

其中_upload_error.jsp为你自定义的错误信息显示页面。

走到这一步你还不要高兴的太早,这或许只能提示类型不正确的信息,而针对文件过大的情况并不能给出提示,本人根据网上提供的各种方法进行测试,结果发现都是扯淡,按照他们的方法都不能在页面给出提示信息,,最后自己弄了一种本方法进行提示,该方法能在前台页面给出提示信息,但是后台仍然会报出异常信息,具体方法是:

在你的action类中重写addActionError方法,这个方法是ActionSupport中的,所以你的action类要直接或者间接地继承ActionSupport类。

        @Override
public void addActionError(String anErrorMessage){
System.out.println(anErrorMessage);
if (anErrorMessage

                .startsWith("the request was rejected because its size")) {
request.setAttribute("info", "对不起,你上传的文件太大,服务器拒绝接受,请上传100M以下的文件!");

            super.addActionError(anErrorMessage);

        } else {

            super.addActionError(anErrorMessage);

        }
}

那么页面怎么提示呢,由于类型提示信息和大小提示信息我希望是在同一个页面,所以页面代码如下:

                 <p>
<s:fielderror name="file">

                            <%String info=(String)request.getAttribute("info");
     if(info!=null&&(!"".equals(info.trim())))

                                 out.println(request.getAttribute("info"));%>

                        </s:fielderror>
</p>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: