概述
首先简述一下问题,项目时SSH框架搭的,是一个小例子,什么样式都没有,只是使用<s:iterator>将值栈中的数据遍历出来,使用<a>标签来提交修改和删除,但是遇到了action执行两次的问题。通过debug调试。firebug调试,和在浏览器输入条中手动删除数据最终确定是<a>标签造成的提交两次。暂时不清楚造成的原理是什么,但是提供一个简单的解决方案,供参考,有解决的朋友也可以相互探讨,谢谢。
jsp代码(提交两次的)
<table width="860" border="1" cellPadding="4" cellSpacing="0"style="border-collapse: collapse" BorderColor="#808080">
<tr>
<th width="50" scope="col">编号</th>
<th width="70" scope="col">用户名</th>
<th width="70" scope="col">权限名称</th>
<th width="70" scope="col">性别</th>
<th width="70" scope="col">邮箱</th>
<th width="70" scope="col">电话</th>
<th width="70" scope="col">创建时间</th>
<th width="70" scope="col">修改</th>
<th width="70" scope="col">删除</th>
</tr>
<s:iterator value="user" var="u" status="u_index">
<tr>
<td><s:property value="#u_index.index+1" /></td>
<td><s:property value="#u.name" /></td>
<td><s:property value="#u.remark" /></td>
<td>
<s:if test="#u.sex=='0'.toString()">
女
</s:if><s:elseif test="#u.sex=='1'.toString()">
男
</s:elseif><s:else>
</s:else>
</td>
<td><s:property value="#u.email" /></td>
<td><s:property value="#u.tel" /></td>
<td>
<s:property value="#u.createdate" />
<!-- 注释掉的按格式显示时间代码开始时候可以使用。但是修改调试程序之后不知道为什么不起作用了
暂时注释,方法没有问题,-->
<!-- <s:property value="%{getText('{0,date,yyyy-MM-dd}',{#u.createdate})}" /> -->
</td>
<!--从其他地方找了些帖子看,好多说是有多个a标签或图像的标签影响,所以先删掉只保留删除-->
<td>修改
</td>
<td>
<!--a标签提交action造成了两次提交,-->
<a href="delUserById.action?id=<s:property value="#u.id" />">删除</a>
</td>
</tr>
</s:iterator>
</table>
struts.xml的配置action代码
<action name="delUserById" class="userAction" method="delUserById">
<result name="delUser"type="dispatcher">main.jsp</result>
<result name="error">main.jsp</result>
</action>
action的代码
public String delUserById(){
id = Integer.parseInt(ServletActionContext.getRequest().getParameter("id"));
System.out.println(id);
//现将后台的删除逻辑注掉只执行打印语句,获得两次id结果
//users = userService.delUserById(id);
//if(users.isEmpty()){
// return "error";
//}else{
// ActionContext.getContext().put("user", users);
return "delUser";
//}
}
解决方案:将a便签的提交换成button提交,换成button提交的后果就是添加点击事件onclick()
将“删除”的代码改为
<input type="button" value = "删除" οnclick="del(<s:property value="#u.id" />)"/>
js代码为
<script type="text/javascript">
function del(id){
var url='delUserById?id='+id;
//alert(url);
window.location=url;
}
</script>
这样修改后完全正常,不会在出现提交两次,如果用a标签提交action,一定要检查类似这样的代码<a href="">最好改成
<a href="#">同时也要之一图片地址代码<src="">还有头文件中的link.
总之,使用a标签比较简单。但是出错后确实诡异。
最后
以上就是土豪小兔子为你收集整理的关于SSH项目中a标签提交action后执行两次的问题的全部内容,希望文章能够帮你解决关于SSH项目中a标签提交action后执行两次的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复