不说废话,直接贴代码:
action:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RightsForm rightsForm = (RightsForm) form;
@SuppressWarnings("unused")
String status = null;
/*检验Url地址是否重复(权限点的管理是基于url判断的)*/
List checkUrl = checkUrlService.checkUrl(rightsForm.getPrivilege().getUrl());
if(!rightsForm.getPrivilege().getPareventId().equals("0") && checkUrl != null && checkUrl.size() > 0){
status = "数据库中的地址不可重复!";
InfoTips infoTips = new InfoTips();
infoTips.setTipsInfo("No data:数据库中的地址不可重复!");
request.setAttribute("InfoTips", infoTips);
return mapping.findForward("add_error");
}else{
List str = new ArrayList();
str.add("系统面板");
str.add("用户管理");
str.add("权限组设置");
str.add("权限模块设置");
str.add("用户日志");
str.add("用户面板");
str.add("修改密码");
str.add("退出系统");
if(str.contains(rightsForm.getPrivilege().getPrvname().toString())){
rightsForm.getPrivilege().setIssys(1);
}else{
rightsForm.getPrivilege().setIssys(0);
}
rightsService.addRghts(rightsForm.getPrivilege());
logService.log(request, "Add rights : " + rightsForm.getPrivilege().getPrvname() );
status = Constants.PROCESS_DATABASE_ADD_OK;
dbService.setFatherRights();
return mapping.findForward("add_success");
}
}jsp页面:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="javascript">
function CheckForm(tarFrm){
if(tarFrm.name.value.length<1){
alert("请输入'模块名称'!");
tarFrm.name.focus();
return (false);
}
if(tarFrm.url.value.length<1){
alert("请输入'链接文件'!");
tarFrm.url.focus();
return (false);
}
if(tarFrm.vieworder.value.length<1){
alert("请输入'显示顺序'!");
tarFrm.vieworder.focus();
return (false);
}
return true;
}
</script>
<title>System rights manage</title>
<link href="../css/common.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td bgcolor="#FFFFFF">系统面板>权限模块设置>添加模块</td>
</tr>
<tr>
<td bgcolor="#cccccc"> </td>
</tr>
</table>
<br>
<br>
<html:form action="/rights.do?method=add" onsubmit="javascript:return CheckForm(this);" method="post">
<table width="400" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="20%">模块名称:</td>
<td width="80%">
<html:text property="privilege.prvname"/>
</td>
</tr>
<tr>
<td>链接文件:</td>
<td>
<html:text property="privilege.url"/>
</td>
</tr>
<tr>
<td>父模块:</td>
<td>
<html:select property="privilege.pareventId">
<html:options collection="pareventId" property="value" labelProperty="label" filter="false"/>
</html:select>
</td>
</tr>
<tr>
<td>显示顺序:</td>
<td>
<html:text property="privilege.vieworder" size="3"/>(正整数)
</td>
</tr>
<tr>
<td>状态:</td>
<td>
<html:radio property="privilege.status" value="1" styleId="status1"/><LABEL for="status1">启用</LABEL>
<html:radio property="privilege.status" value="0" styleId="status2"/><LABEL for="status2">停用</LABEL>
</td>
</tr>
<tr>
<td>备注:</td>
<td>
<html:textarea property="privilege.re" cols="30" rows="5"/>
</td>
</tr>
<tr align="center">
<td colspan="2">
<logic:present name="InfoTips" scope="request">
<div>
<bean:message key="message.login.status"/>
<bean:write name="InfoTips" property="tipsInfo"/>
</div>
</logic:present><br>
<input type="submit" name="cmdAdd" value="添 加">
<input type="reset" name="cmdReset" value="重 置">
<input type="button" name="cmdBack" value="返回上级" onclick="javascript:location='rights.do?method=main';">
</td>
</tr>
</table>
</html:form>
</body>
</html>第一次提交表单的时候,后天数据库显示数据添加正确,可是这次表单提交以后,又跳转到这个添加的action代码这里,重新执行这个action,怎么回事啊?页面提交用submit提交的,也没有img等那种加载图片的东东,网上搜了很多,但没有一种跟我这个一样,呵呵,请各位大哥大姐帮忙哦
action:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RightsForm rightsForm = (RightsForm) form;
@SuppressWarnings("unused")
String status = null;
/*检验Url地址是否重复(权限点的管理是基于url判断的)*/
List checkUrl = checkUrlService.checkUrl(rightsForm.getPrivilege().getUrl());
if(!rightsForm.getPrivilege().getPareventId().equals("0") && checkUrl != null && checkUrl.size() > 0){
status = "数据库中的地址不可重复!";
InfoTips infoTips = new InfoTips();
infoTips.setTipsInfo("No data:数据库中的地址不可重复!");
request.setAttribute("InfoTips", infoTips);
return mapping.findForward("add_error");
}else{
List str = new ArrayList();
str.add("系统面板");
str.add("用户管理");
str.add("权限组设置");
str.add("权限模块设置");
str.add("用户日志");
str.add("用户面板");
str.add("修改密码");
str.add("退出系统");
if(str.contains(rightsForm.getPrivilege().getPrvname().toString())){
rightsForm.getPrivilege().setIssys(1);
}else{
rightsForm.getPrivilege().setIssys(0);
}
rightsService.addRghts(rightsForm.getPrivilege());
logService.log(request, "Add rights : " + rightsForm.getPrivilege().getPrvname() );
status = Constants.PROCESS_DATABASE_ADD_OK;
dbService.setFatherRights();
return mapping.findForward("add_success");
}
}jsp页面:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="javascript">
function CheckForm(tarFrm){
if(tarFrm.name.value.length<1){
alert("请输入'模块名称'!");
tarFrm.name.focus();
return (false);
}
if(tarFrm.url.value.length<1){
alert("请输入'链接文件'!");
tarFrm.url.focus();
return (false);
}
if(tarFrm.vieworder.value.length<1){
alert("请输入'显示顺序'!");
tarFrm.vieworder.focus();
return (false);
}
return true;
}
</script>
<title>System rights manage</title>
<link href="../css/common.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td bgcolor="#FFFFFF">系统面板>权限模块设置>添加模块</td>
</tr>
<tr>
<td bgcolor="#cccccc"> </td>
</tr>
</table>
<br>
<br>
<html:form action="/rights.do?method=add" onsubmit="javascript:return CheckForm(this);" method="post">
<table width="400" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="20%">模块名称:</td>
<td width="80%">
<html:text property="privilege.prvname"/>
</td>
</tr>
<tr>
<td>链接文件:</td>
<td>
<html:text property="privilege.url"/>
</td>
</tr>
<tr>
<td>父模块:</td>
<td>
<html:select property="privilege.pareventId">
<html:options collection="pareventId" property="value" labelProperty="label" filter="false"/>
</html:select>
</td>
</tr>
<tr>
<td>显示顺序:</td>
<td>
<html:text property="privilege.vieworder" size="3"/>(正整数)
</td>
</tr>
<tr>
<td>状态:</td>
<td>
<html:radio property="privilege.status" value="1" styleId="status1"/><LABEL for="status1">启用</LABEL>
<html:radio property="privilege.status" value="0" styleId="status2"/><LABEL for="status2">停用</LABEL>
</td>
</tr>
<tr>
<td>备注:</td>
<td>
<html:textarea property="privilege.re" cols="30" rows="5"/>
</td>
</tr>
<tr align="center">
<td colspan="2">
<logic:present name="InfoTips" scope="request">
<div>
<bean:message key="message.login.status"/>
<bean:write name="InfoTips" property="tipsInfo"/>
</div>
</logic:present><br>
<input type="submit" name="cmdAdd" value="添 加">
<input type="reset" name="cmdReset" value="重 置">
<input type="button" name="cmdBack" value="返回上级" onclick="javascript:location='rights.do?method=main';">
</td>
</tr>
</table>
</html:form>
</body>
</html>第一次提交表单的时候,后天数据库显示数据添加正确,可是这次表单提交以后,又跳转到这个添加的action代码这里,重新执行这个action,怎么回事啊?页面提交用submit提交的,也没有img等那种加载图片的东东,网上搜了很多,但没有一种跟我这个一样,呵呵,请各位大哥大姐帮忙哦
解决方案 »
- 一个不同寻常的Servlet.service() for servlet action threw exceptionjava.lang.NullPointerException(高分,急急!!!!)
- 这段HQL语句到底应该怎么写!!我有三个相关的表从第一个表取出第三个表的数据,结果报了这样的错误,求解答!!
- 外企的一道面试题.还请高手多多指点指点(急)!谢了!!
- 在log4j下能否直接生成标准的xml文档
- 请问哪里有sping包下载?
- 成功运行了struts+spring+hibernate的例子wiring的朋友进来帮帮忙
- 请教怎样通过一个字符窜ID来定位bean,再调用EJBHome.remove()的方法来删除??
- 请大神帮忙这么挫怎么解决
- 求解,,hibernate问题
- 求解决
- 想问下服务器端验证一般在哪一层进行?
- 关于hibernate中annotation包的问题
你点提交触发onclick事件有个action 然后验证成功后表单提交又是rights.do
你的method有什么区别?
如果是送出兩次submit,那是javascript的問題。
如果是回到頁面又自動送出,則可能是頁面流程有問題。
<action
attribute="rightsForm"
name="rightsForm"
parameter="method"
path="/rights"
scope="request"
validate="false"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="rights_main" path="/rights/rights_main.jsp"/>
<forward name="add_rights" path="/rights/rights_add.jsp"/>
<forward name="add_success" path="/rights.do?method=main"/>
<forward name="add_error" path="/rights.do?method=addBefore"/>
<forward name="edit" path="/rights/rights_edit.jsp"/>
</action>
我把path改成"/rights.do?method=addBefore"就没问题,现在的逻辑要求是提交表单成功之后,跳转到rights.do?method=main这里,但如果是这样的话,就会重复执行这个action,怎么解决啊?谢谢你的耐心指点,呵呵。
应该增加个参数。由它表明是添加数据,还是不添加数据。
public ActionForward addBefore(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//显示select下拉框里的内容
List viewList = new ArrayList();
List selectList = prvTreeService.searchPrv("0");
viewList.add(new LabelValueBean("-------顶级权限-------","0"));
if(selectList.size() > 0 && selectList != null){
for (int i = 0; i < selectList.size(); i++) {
Object[] row = (Object[]) selectList.get(i);
String prvid = (String) row[0];
String prvname = (String) row[1];
viewList.add(new LabelValueBean(prvname,prvid));
}
}
request.setAttribute("pareventId", viewList);
return mapping.findForward("add_rights");
}
main代码如下:
public ActionForward main(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//验证是否登录以及权限
if(!(check.isRights(request, response)).equals("OK")){
check.redirectError(request, response, "error.do?base64=true&errMsg=" +check.isRights(request, response));
return null;
}else{
boolean isData = false;
int pageSize = Constants.PAGE_SIZE;
String page = request.getParameter("page");
page = (page == null) ? "1" : page.trim();
ComList iterator = new ComList();
ComParam param ;
String pageStr = "";
int totalNum = pageService.getCount();
String dbPageAttr[] = dbPage.getPageInfo(totalNum + "", pageSize, page,"rights_main.do?");
pageStr = dbPageAttr[2];
List queryList = pageService.getQuery(Integer.parseInt(dbPageAttr[0]), pageSize);
String fatherTmp = "";
if(queryList != null && queryList.size()>0){
List list = new ArrayList();
TPrivilege privilege ;
String bgColor = "#ffffff";
Hashtable fatherRights = dbService.getFatherRights();
for (int i = 0; i < queryList.size(); i++) {
bgColor = ((i%2) == 0)?"#ffffff":"#eaeaea";
privilege = (TPrivilege) queryList.get(i);
param = new ComParam();
param.setParam0(bgColor);
param.setParam1(privilege.getPrvid());
param.setParam2(privilege.getPrvname());
param.setParam3(privilege.getUrl());
try {
fatherTmp = fatherRights.get(privilege.getPareventId()).toString();
} catch (Exception e) {
fatherTmp = "父级数据丢失...";
}
param.setParam4(fatherTmp);
param.setParam5((privilege.getStatus().intValue() == 1)?"启用":"禁用");
param.setParam6((privilege.getIssys().intValue() == 1)?"disabled = \"disabled\"":"");//是否是系统固定菜单,固定菜单将不可删除
list.add(param);
}
iterator.setParamList(list);
fatherRights = null;
privilege = null;
isData = true;
}
request.setAttribute("ComList", iterator);
if(isData){
PagesInfo pageInfo = new PagesInfo();
pageInfo.setPageInfo(pageStr);
request.setAttribute("PageInfo", pageInfo);
}else{
InfoTips infoTips = new InfoTips();
infoTips.setTipsInfo("No data");
request.setAttribute("InfoTips", infoTips);
}
iterator = null;
}
return mapping.findForward("rights_main");
}谢谢您的指点,同样也期待您的回复,呵呵
试一下
其实你这个问题是重复提交的问题 连续两次提交同一个action 表单中的信息被重复提交了 虽然method不一样
加上redirect就是重定向了 提交一次后重定向到第二个action 第一次提交post中的表单数据丢失 就不会重复提交了可以去看一下redirect 和 forward的区别