不说废话,直接贴代码:
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">系统面板&gt;权限模块设置&gt;添加模块</td>
  </tr>
  <tr>
    <td bgcolor="#cccccc">&nbsp;</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等那种加载图片的东东,网上搜了很多,但没有一种跟我这个一样,呵呵,请各位大哥大姐帮忙哦

解决方案 »

  1.   

    看你写的代码<html:form action="/rights.do?method=add" onsubmit="javascript:return CheckForm(this);" method="post"><input type="button" name="cmdBack" value="返回上级" onclick="javascript:location='rights.do?method=main';">  
    你点提交触发onclick事件有个action 然后验证成功后表单提交又是rights.do
    你的method有什么区别?
      

  2.   

    是送出兩次submit,還是送出後回到原頁面,又自動送出一次?
    如果是送出兩次submit,那是javascript的問題。
    如果是回到頁面又自動送出,則可能是頁面流程有問題。
      

  3.   

    跟这个button没关系啊,提交的是submit,我删掉这个button,结果还是一样,重复执行了action。现在问题貌似解决了。请看看我的action配置:
    <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,怎么解决啊?谢谢你的耐心指点,呵呵。
      

  4.   

    果然不出于你所料,貌似是页面流程问题,因为我把path改成"rights.do?mehtod=addBefore"的话,就正常,不会重复执那个action,现在只要我把path改成"rights.do?method=main"的话,就会重复执行action,请问这是怎么回事啊?main这个action和add这个action没有直接关系,期待您的解答,呵呵
      

  5.   

    你是POST的,所以只要再访问这个ACTION,肯定是又提交了。
    应该增加个参数。由它表明是添加数据,还是不添加数据。
      

  6.   

    看一下addBefore和main action具体的代码
      

  7.   

    addBefore代码如下:
    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");
    }谢谢您的指点,同样也期待您的回复,呵呵
      

  8.   

    <forward name="add_success" path="/rights.do?method=main" redirect="true"/>
    试一下
      

  9.   

    非常感谢您的指点,按照您所说的,加上redirect="true",就正确跳转了,能否告诉我为什么这么写就正常了啊?期待您的答案,呵呵。
      

  10.   

    redirect="true"是表示重定向,就是重新发送一个请求到rights.do?method=main。
      

  11.   


    其实你这个问题是重复提交的问题 连续两次提交同一个action 表单中的信息被重复提交了 虽然method不一样
    加上redirect就是重定向了 提交一次后重定向到第二个action 第一次提交post中的表单数据丢失 就不会重复提交了可以去看一下redirect 和 forward的区别