1.测试人员都走了好久了,一同事的模块由于涉及到附件的添加不能走AJAX.就走的submit这样当添加成功后,刷新的时候就会再增加一条信息.
经过大家讨论只要让他重定向就是了.在struts的action中让一个url实现重定向的方法:
new ActionForward("url",true);
或者在配置文件里进行修改.
2. 网上的其它方法,但我自己没有测试
isTokenValid
Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
resetToken
Reset the saved transaction token in the user's session.
saveToken
Save a new transaction token in the user's current session, creating a new session if necessary.
为了防止用户重复提交,在数据读入.do未中加入saveToken(request),
在第二个.do的开始判断isTokenValid(request)如果有效继续否则丢出错误信息,
最后resetToken(requet)注销token
struts自带的例子:
Struts 里面有一个检查重复提交的机制:
具体可以参看 Struts-example 里面的相关程序:
in EditRegistrationAction:
// Set a transactional control token to prevent double posting
saveToken(request);
in SaveRegistrationAction 里面:
if (!isTokenValid(request)) {
// 处理错误
}
resetToken(request);
《j2ee核心模式》这本书上有详细介绍。
基本原理
第一次提交,生成同步令牌 写入到session,同时把同步令牌写入到返回页中;
再次提交,比较同步令牌,如果相同,重复上面动作, 不同则重复提交了。
if (!isTokenValid(request)) {
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"_));
}
resetToken(request);
这种方法在<<精通struts>>一书中也提到了.