【发布时间】:2013-11-06 21:32:08
【问题描述】:
当我们比较双击提交按钮和单击两次提交按钮后触发的事件时,在逻辑流方面有什么区别?
我有一个 Struts 1 应用程序(设计得很糟糕),我无法理解双击时实际发生的情况。
JSP如下图,点击Add xItem会调用action类的doAdd()方法(此时doAdd方法中str为null)转发给xItemAdd.jsp
xItemAdd.jsp 包含一个带有几个复选框和一个加载按钮的主要表单。单击加载时调用 doAdd,其中选定复选框和列表框的值被获取/放入会话属性并再次转发到 xItemAdd.jsp
xItemAdd.jsp 包含在选中相应复选框时显示表单的脚本。所以现在如果选择了 1 和 3 个复选框并单击了加载,则会显示 Form1 和 Form3
<% for(int i=0;i<selmsgs.size();size++)
{Systeml.out.println("i :"+i +"size "+selmsgs.size());
...%>
这是一个动作类的sn-p
Class MyAction
{...
public Object doAdd(.......)
{ System.out.println("Add method :");
String[] str=request.getParameter("SelectionList");
ArrayList<String>[] mylist=request.getParameter("CheckedValues").split(',');
//Allowing duplicate values to be added in mylist
if(str!=null&&str.equals("true")
request.getSession.setAttribute("IsLoaded","false");
if(str!=null)
{
request.getSession.setAttribute("ObjectList",mylist);
request.getSession.setAttribute("IsLoaded","true");
}
return SUCCESS;
}
}
按预期单击图 2 中的加载按钮,视图变为图 3,如果再次单击,则加载表单(用于选定的复选框)并保持如图 3 所示 但是如果双击加载按钮会出现奇怪的行为,每个选定的表单都会重复出现。所以图 3 就像 Form 1,Form3 和 Form1,Form3
doAdd 方法返回后,JSP 被调用两次,如图 3 所示的 jsp 中的打印行打印出类似的内容
i: 0 size :2
i:0 size :1
i:1 size : 2
看起来好像两个线程正在执行 JSP 脚本
您能否解释一下在此处双击加载按钮与同时单击两次加载按钮之间的行为差异,因为两者都会提交两次表单?
双击加载按钮后实际发生了什么?
【问题讨论】:
标签: jsp jakarta-ee struts-1 double-submit-problem