学习Struts时候难免会有这些比较经典和知识点。重复提交当然是首当其冲,真的比那两种客户端用javascript来的实用,虽然速度上面也许会有点缺陷吧。不过相信不会影响大家对他的喜爱。。
如果你看过孙卫琴的那本经典的Struts书,也许对我这篇文章也许都不会去理睬了。不过我会用再简单的语言去描述它。往下看吧。。
我用的主要原理还是做一个中转的Action去处理保存Token
为了简单演示我就用index.jsp做第一页面吧。
主要流程:
index.jsp-->preInsertAction-->insert.jsp-->insertAction
详细解释:
1.在页面中加入跳转到preInsertAction的链接
<html:link action="preInser">
插入
</html:link>
或者
<html:link page="preinsert" path="preInsert.do">
插入
</html:link>
或者
<html:link forward="preinsert">
插入
</html:link>
一般是都是用<html:link>,其中常用的跳转标记有三种page,forward,action
当然action使用最简单,其它两种还要在struts-config.xml中的全局跳转配置一个forword,如下:
<global-forwards >
<forword name="" path="preInsert.do"/>
</global-forwards>
2.struts-config.xml的配置
<action
attribute="insertForm"
input="/insert.jsp"
name="insertForm"
path="/insert"
scope="request"
type="......InsertAction" />
<action path="/perpareInsert" type=".......PreInsertAction" >
<forward name="insert" path="/insert.jsp"/>
</action>
3.PreInsertAction
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//创建一个新的令牌
this.saveToken(request);
return mapping.findForward("insert");
}
4.InsertAction
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
InsertForm insertForm = (InsertForm) form;// TODO Auto-generated method stub
if(!isTokenValid(request)){
ActionMessages errors=new ActionMessages();
errors.add("insertToken",new ActionMessage("error.token"));
this.saveErrors(request, errors);
this.saveToken(request);
return mapping.getInputForward();
}else{
this.resetToken(request);
}
//逻辑应该写在这里
return mapping.findForward(" ");
}
总结:这样差不多大家都可以很容易得了解它了吧。。试试去用用它。。。还有两种javascript原理实现的主要是对按钮的处理。我这里就不说了。。
以上的要是有什么小错误的话。。请见谅。。哈。