Action:
- /**
- * 当上传文件大小大于struts.multipart.maxSize提示时,
- * 客户端会出现如下错误:
- * "the request was rejected because its size (4501994)
- * exceeds the configured maximum (2097152)"。
- * 此信息在commons-fileupload.jar,
- * org.apache.commons.fileupload.FileUploadBase源代码中第904行。
- *
- * 重写addActionError()以替换默认信息。
- */
- @Override
- public void addActionError(String anErrorMessage) {
- //这里要先判断一下,是我们要替换的错误,才处理
- if (anErrorMessage.startsWith("the request was rejected because its size")) {
- //这些只是将原信息中的文件大小提取出来。
- Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);
- String s1 = "";
- if (m.find()) s1 = m.group();
- String s2 = "";
- if (m.find()) s2 = m.group();
- //偷梁换柱,将信息替换掉
- // super.addActionError("你上传的文件(" + s1 + ")超过允许的大小(" + s2 + ")");
- super.addActionError("您上传的附件过大,请确保单次所上传的附件大小总和没有超过20兆!");
- isExceedMaximum=true;
- } else {//不是则不管它
- super.addActionError(anErrorMessage);
- }
- }
/**
* 当上传文件大小大于struts.multipart.maxSize提示时,
* 客户端会出现如下错误:
* "the request was rejected because its size (4501994)
* exceeds the configured maximum (2097152)"。
* 此信息在commons-fileupload.jar,
* org.apache.commons.fileupload.FileUploadBase源代码中第904行。
*
* 重写addActionError()以替换默认信息。
*/
@Override
public void addActionError(String anErrorMessage) {
//这里要先判断一下,是我们要替换的错误,才处理
if (anErrorMessage.startsWith("the request was rejected because its size")) {
//这些只是将原信息中的文件大小提取出来。
Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);
String s1 = "";
if (m.find()) s1 = m.group();
String s2 = "";
if (m.find()) s2 = m.group();
//偷梁换柱,将信息替换掉
// super.addActionError("你上传的文件(" + s1 + ")超过允许的大小(" + s2 + ")");
super.addActionError("您上传的附件过大,请确保单次所上传的附件大小总和没有超过20兆!");
isExceedMaximum=true;
} else {//不是则不管它
super.addActionError(anErrorMessage);
}
}
jsp:
- <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
- <%@taglib uri="/struts-tags" prefix="s"%>
- <html>
- <body>
- <!--fielderror-->
- <s:if test="hasFieldErrors()">
- <s:iterator value="fieldErrors">
- <s:iterator value="value" status="statu">
- <!-- //field的错误消息是List 因此还需要迭代一次 -->
- <s:set name="index" value="#statu.index"/>
- <s:set name="msg" value="#msg+value.get(#request.index).toString()==null||#msg+value.get(#request.index).toString()=='null'?'':#msg+value.get(#request.index).toString()+'\\\n'"/><!-- 关键代码 不过开始时有null前缀未去掉 -- >
- </s:iterator>
- </s:iterator>
- </s:if>
- <!--actionerror -->
- <s:if test="hasActionErrors()">
- <s:iterator value="actionErrors">
- <script language="JavaScript">
- alert("<s:property escape="false"/>")
- </script>
- </s:iterator>
- </s:if>
- <!-- actionmessage -->
- <s:if test="hasActionMessages()">
- <s:iterator value="actionMessages">
- <script>
- alert("<s:property escape="false"/>")
- </script>
- </s:iterator>
- </s:if>
- <!-- 打印转换好格式的fielderror信息 -->
- <s:if test="#msg.length()>0">
- <script language="JavaScript">
- // alert('<s:property escape="false" value="#msg"/>')
- alert("可能资金格式不是数字,请确认!");
- </script>
- </s:if>
- <script language="JavaScript">
- history.back();
- </script>
- </body>
- </html>
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@taglib uri="/struts-tags" prefix="s"%> <html> <body> <!--fielderror--> <s:if test="hasFieldErrors()"> <s:iterator value="fieldErrors"> <s:iterator value="value" status="statu"> <!-- //field的错误消息是List 因此还需要迭代一次 --> <s:set name="index" value="#statu.index"/> <s:set name="msg" value="#msg+value.get(#request.index).toString()==null||#msg+value.get(#request.index).toString()=='null'?'':#msg+value.get(#request.index).toString()+'\\\n'"/><!-- 关键代码 不过开始时有null前缀未去掉 -- > </s:iterator> </s:iterator> </s:if> <!--actionerror --> <s:if test="hasActionErrors()"> <s:iterator value="actionErrors"> <script language="JavaScript"> alert("<s:property escape="false"/>") </script> </s:iterator> </s:if> <!-- actionmessage --> <s:if test="hasActionMessages()"> <s:iterator value="actionMessages"> <script> alert("<s:property escape="false"/>") </script> </s:iterator> </s:if> <!-- 打印转换好格式的fielderror信息 --> <s:if test="#msg.length()>0"> <script language="JavaScript"> // alert('<s:property escape="false" value="#msg"/>') alert("可能资金格式不是数字,请确认!"); </script> </s:if> <script language="JavaScript"> history.back(); </script> </body> </html>
struts2.xml actionl配置:
如果action中默认的拦截器栈包含fileupload拦截器,就不要另外配置。如myStack,defaultStack。否则addActionError()会多执行一次,页面“您上传的附件过大,请确保单次所上传的附件大小总和没有超过20兆!"的提示会alert2次;
全局大小配置:
struts.xml
<constant name= "struts.multipart.maxSize" value="20971520" />
”