??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
<script language="javascript">
var checkSubmitFlg = false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return false;
}
checkSubmitFlg = true;
return true;
}
document.ondblclick = function docondblclick() {
window.event.returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false;
}
}
</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 q是javascriptQ将提交按钮或者image|ؓdisable
<html:form action="myAction.do" method="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
</html:form>
3 利用struts的同步o牌机制
利用同步令牌QTokenQ机制来解决Web应用中重复提交的问题QStruts也给Z一个参考实现?
基本原理Q
服务器端在处理到辄h之前Q会请求中包含的o牌g保存在当前用户会话中的o牌D行比较,看是否匹配。在处理完该h后,且在{复发送给客户端之前,会产生一个新的o牌,该o牌除传给客户端以外,也会用户会话中保存的旧的o牌进行替换。这样如果用户回退到刚才的提交面q再ơ提交的话,客户端传q来的o牌就和服务器端的令牌不一_从而有效地防止了重复提交的发生。
if (isTokenValid(request, true)) {
// your code here
return mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain");
}
StrutsҎ用户会话ID和当前系l时间来生成一个唯一Q对于每个会话)令牌的,具体实现可以参考TokenProcessorcM的generateToken()Ҏ。
1. //验证事务控制令牌,<html:form >会自动根据session中标识生成一个隐含input代表令牌Q防止两ơ提?
2. 在action中:
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //删除session中的令牌
3. action有这L一个方法生成o牌
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}
Validator是基于JavaScript技术的伪静态类和对象的自定义属性,可以对网中的表单项输入q行相应的验证,允许同一面中同旉证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字W串q行验证。因为是伪静态类Q所以在调用时不需要实例化Q直接以"cd+.语法+属性或Ҏ?来调用。此外,Validatorq提?U不同的错误提示模式Q以满不同的需要?
Validator目前可实现的验证cd有:
[JavaScript] ?BR>Validator目前可实现的验证cd有:
1.是否为空Q?BR>2.中文字符Q?BR>3.双字节字W?BR>4.英文Q?BR>5.数字Q?BR>6.整数Q?BR>7.实数Q?BR>8.Email地址Q?BR>9.使用HTTP协议的网址Q?BR>10.电话LQ?BR>11.货币Q?BR>12.手机LQ?BR>13.邮政~码Q?BR>14.w䆾证号?1.05增强)Q?/FONT>
15.QQLQ?BR>16.日期Q?BR>17.W合安全规则的密码;
18.某项的重复|
19.两数的关pL较;
20.判断输入值是否在(n, m)区间Q?BR>21.输入字符长度限制(可按字节比较)Q?BR>22.对于h相同名称的单选按钮的选中判断Q?BR>23.限制h相同名称的多选按钮的选中数目Q?BR>24.自定义的正则表达式验证;
25.文g上传格式qo(1.04)
q行环境(客户?Q?
在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0试通过Q?BR>在Lunix RedHat 9下的Netscape试通过Q?
对于客户端的表单验证Q这个基于JavaScript~写的Validator基本上都可以满Q具体可以下载CHM文gQ?A class="" HREF="/Files/sunny/sunny.rar" target=_blank>Validator.CHM下蝲
CZQ?/P>
q行代码?BR>
[Ctrl+A 全部选择 拯C个html文g后打开]