为什么要自找麻烦呢,把fore1,与form2 分开到两个不同的jsp叶面不好吗?

解决方案 »

  1.   

    1。既然每次都要既提交form1又form2,为何不合并?
    2。开始不提交form1,最后finish时候,才提交,考虑用javascript进行控制
      

  2.   

    是这样,在逻辑上form1是基本信息,form2是附加信息,首先填写form1,然后才能填form2。form1只填写一次,form2填写多次,也就是说一个form1对应多个form2。开始提交form1是因为,想让填到form1里的内容一直显示
    其实关键在于怎么多次填写form2,每填一次提交一次,最后把所有内容存到数据库中。
      

  3.   

    可以在jsp和servlet中个设个Vector,jsp每传一个form2,就存在servlet中的Vector中,返回jsp时将Vector传回,保存在jsp中,然后jsp提交servlet,将新的form2存在vector中.就是用vector存信息,通过把vector当参数传递来保存vector。
    还有就是可以用session
      

  4.   

    把2个form写在一个jsp文件中可以用javascript实现
    function test1{
    document.form1.action="1.jsp";
    document.submit;
    }
    function test2{
    document.form2.action="2.jsp";
    document.submit;
    }
      

  5.   

    把2个form写在一个jsp文件中可以用javascript实现
    function test1(){
    document.form1.action="1.jsp";
    document.form1.submit;
    }
    function test2(){
    document.form2.action="2.jsp";
    document.form2.submit;
    }
      

  6.   

    我的想法:form1的内容如果在每个页面都需要,可以考虑把它存在session中,就是说第一次提交后,判断如果session中没有这个valuebean,则保存,以后只需让jsp页从session取这个valuebean显示即可。于是,jsp页就当成一个只包含form2的页面来处理,应该不难了。
      

  7.   

    form1解决了,关键是form2的问题,所有的form2都提交后和form1一起加到数据库中,并不是提交一次加一次,而是最后一起加到数据库中,这是难点,所以请大家多向这方面想想.
      

  8.   

    这可以变通嘛:就是这个JSP页面中的FORM 提交给自己。这个JSP再把数据保存在SESSION中。如果FORM提交时数据已经输入完,JSP就转到下一个JSP页,
    这下个JSP页中SESSION中取数据,并且保存起来,这就完成了数据处理
      

  9.   

    你每次从form2填写数据后提交,交到servlet后,对数据干了些什么?根据你的做法好像什么也没干(如果只是做些输入内容的合理性的判断)那倒不如用javascript来解决。如果若干次提交的信息不是很多的话,还是用session比较好
    如果很多,建议修改设计思路。
      

  10.   

    form2的多次提交问题我觉得可以这样:每次提交后存在session中,最后一次再写到DB中。如果是用EJB来实现,可以用有状态的会话bean,很方便。或者也可以用JDBC的事务来处理,设置它不是自动commit,然后手工提交,每次都insert,但直到最后才commit。不知道你觉得哪种比较合适?
      

  11.   

    我觉得可以给form2一个专门的值Bean,放在Servlet中,每次提交后都把form2提交的内容写入值Bean,等到最后由Servlet将这个值Bean内的数据一起写到DB中去。
    BTW:为什么要多次提交form2呢?我觉得应该可以没提交一次就往数据库里写一次吧。
      

  12.   

    是这样,jsp中提交form1和form2,一个form1对应多个form2,因此form1只提交一次,而form2提交多次,每次提交调用此servlet,如果bat=con说明还有form2要提交,此时servlet将M2Port存到vector中,然后将vector放在session里,返回jsp,下一次将session中的vector调出来,再将新的M2Port加到vector中.如果bat=fns说明全部提交完毕,servlet调用M2Service将M2和vector中的多个M2Port加到数据库中.
    关键是用session保存jsp多提交的值的问题,我得源程序只能保存最后一次提交的数据,请看看哪里出了错.
    所有需要的类都已导入,程序调试通过,只有一个问题,为什么最后session中的vector只有一个对象.源程序如下:public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
      {
        response.setContentType("text/html; charset=GBK");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(true);
        response.addHeader("Pragma","No-cache");
        response.addHeader("Cache-Control","no-cache");
        response.addDateHeader("Expires",1);
        AsciiBean change=new AsciiBean();//转换为字符串的类,已导入
        ChangNum cn =new ChangNum();//转换为数字的类,已导入    
        RequestDispatcher view = null;
        Status status = new Status();
        String bat = request.getParameter("bat");
        request.setAttribute("status",status);    int             m2PortId = 0;
        String              type = "";
        int             systemId = 0;
        String               m34 = "";
        String                m2 = "";
        int  firstMachineHouseId = 0;
        String firstMachineHouse = "" ;
        String      firstSubrack = "";
        int          firstCardId = 0;
        int         firstPortRow = 0;
        int    endMachineHouseId = 0;
        String   endMachineHouse = "";
        String        endSubrack = "";
        int            endCardId = 0;
        int           endPortRow = 0;
        int               serial = 0;    M2Port       m2Port = new M2Port();
        M2              aM2 = new M2();
        M2Service m2Service = new M2Service();// 执行数据库操作的类
        Vector m2PortVector = new Vector();    if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
        }
        
        try
        {
           if(bat.equals("con"))//如果jsp中继续添加M2Port
           {
                       m2PortId = 0;
                       if(request.getParameter("type") != null)
                       {
                         type = change.AsciiBean(request.getParameter("type"));
                       }
                       if(request.getParameter("systemId") != null)
                       {
                         systemId = cn.ChangNum(request.getParameter("systemId"));
                       }
                       if(request.getParameter("m34") != null)
                       {
                            m34 = change.AsciiBean(request.getParameter("m34"));
                       }
                       if(request.getParameter("m2") != null)
                       {
                             m2 = change.AsciiBean(request.getParameter("m2"));
                       }
                       if(request.getParameter("firstMachineHouseId") != null)
                       {
                         firstMachineHouseId = cn.ChangNum(request.getParameter("firstMachineHouseId"));
                       }
                       if(request.getParameter("firstMachineHouse") != null)
                       {
                         firstMachineHouse = change.AsciiBean(request.getParameter("firstMachineHouse"));
                       }
                       if(request.getParameter("firstSubrack") != null)
                       {
                         firstSubrack = change.AsciiBean(request.getParameter("firstSubrack"));
                       }
                       if(request.getParameter("firstCardId") != null)
                       {
                         firstCardId = cn.ChangNum(request.getParameter("firstCardId"));
                       }
                       if(request.getParameter("firstPortRow") != null)
                       {
                         firstPortRow = cn.ChangNum(request.getParameter("firstPortRow"));
                       }
                       if(request.getParameter("endMachineHouseId") != null)
                       {
                         endMachineHouseId = cn.ChangNum(request.getParameter("endMachineHouseId"));
                       }
                       if(request.getParameter("endMachineHouse") != null)
                       {
                         endMachineHouse = change.AsciiBean(request.getParameter("endMachineHouse"));
                       }
                       if(request.getParameter("endSubrack") != null)
                       {
                         endSubrack = change.AsciiBean(request.getParameter("endSubrack"));
                       }
                       if(request.getParameter("endCardId") != null)
                       {
                         endCardId = cn.ChangNum(request.getParameter("endCardId"));
                       }
                       if(request.getParameter("endPortRow") != null)
                       {
                         endPortRow = cn.ChangNum(request.getParameter("endPortRow"));
                       }
                          serial++;         m2Port = new  M2Port(m2PortId,
                                  type,
                                  systemId,
                                  m34,
                                  m2,
                                  firstMachineHouseId,
                                  firstMachineHouse,
                                  firstSubrack,
                                  firstCardId,
                                  firstPortRow,
                                  endMachineHouseId,
                                  endMachineHouse,
                                  endSubrack,
                                  endCardId,
                                  endPortRow,
                                  serial
                                  );
             m2PortVector.add(m2Port);
             session.setAttribute("vector",m2PortVector);
             view = request.getRequestDispatcher("/M2Jsp/Insert.jsp");
             view.forward(request,response);
           }
      

  13.   

    if(bat.equals("fns"))//如果jsp中完成添加
           {
                       m2PortId = 0;
                       if(request.getParameter("type") != null)
                       {
                         type = change.AsciiBean(request.getParameter("type"));
                       }
                       if(request.getParameter("systemId") != null)
                       {
                         systemId = cn.ChangNum(request.getParameter("systemId"));
                       }
                       if(request.getParameter("m34") != null)
                       {
                            m34 = change.AsciiBean(request.getParameter("m34"));
                       }
                       if(request.getParameter("m2") != null)
                       {
                             m2 = change.AsciiBean(request.getParameter("m2"));
                       }
                       if(request.getParameter("firstMachineHouseId") != null)
                       {
                         firstMachineHouseId = cn.ChangNum(request.getParameter("firstMachineHouseId"));
                       }
                       if(request.getParameter("firstMachineHouse") != null)
                       {
                         firstMachineHouse = change.AsciiBean(request.getParameter("firstMachineHouse"));
                       }
                       if(request.getParameter("firstSubrack") != null)
                       {
                         firstSubrack = change.AsciiBean(request.getParameter("firstSubrack"));
                       }
                       if(request.getParameter("firstCardId") != null)
                       {
                         firstCardId = cn.ChangNum(request.getParameter("firstCardId"));
                       }
                       if(request.getParameter("firstPortRow") != null)
                       {
                         firstPortRow = cn.ChangNum(request.getParameter("firstPortRow"));
                       }
                       if(request.getParameter("endMachineHouseId") != null)
                       {
                         endMachineHouseId = cn.ChangNum(request.getParameter("endMachineHouseId"));
                       }
                       if(request.getParameter("endMachineHouse") != null)
                       {
                         endMachineHouse = change.AsciiBean(request.getParameter("endMachineHouse"));
                       }
                       if(request.getParameter("endSubrack") != null)
                       {
                         endSubrack = change.AsciiBean(request.getParameter("endSubrack"));
                       }
                       if(request.getParameter("endCardId") != null)
                       {
                         endCardId = cn.ChangNum(request.getParameter("endCardId"));
                       }
                       if(request.getParameter("endPortRow") != null)
                       {
                         endPortRow = cn.ChangNum(request.getParameter("endPortRow"));
                       }
                          serial++;         m2Port = new  M2Port(m2PortId,
                                  type,
                                  systemId,
                                  m34,
                                  m2,
                                  firstMachineHouseId,
                                  firstMachineHouse,
                                  firstSubrack,
                                  firstCardId,
                                  firstPortRow,
                                  endMachineHouseId,
                                  endMachineHouse,
                                  endSubrack,
                                  endCardId,
                                  endPortRow,
                                  serial
                                  );
             m2PortVector.add(m2Port);         int              m2Id = 0;
             String    circuitName = "";
             String     systemCall = "";
             String      systemNum = "";
             String      startDate = "";
             String       userName = "";
             int        userTypeId = 0;
             String        builder = "";
             String         re = "";
             if(request.getParameter("circuitName") != null)
             {
               circuitName = change.AsciiBean(request.getParameter("circuitName"));
             }
             if(request.getParameter("firstMachineHouseId") != null)
             {
               firstMachineHouseId = cn.ChangNum(request.getParameter("firstMachineHouseId"));
             }
             if(request.getParameter("endMachineHouseId") != null)
             {
               endMachineHouseId = cn.ChangNum(request.getParameter("endMachineHouseId"));
             }
             if(request.getParameter("systemCall") != null)
             {
               systemCall = change.AsciiBean(request.getParameter("systemCall"));
             }
             if(request.getParameter("systemNum") != null)
             {
               systemNum = change.AsciiBean(request.getParameter("systemNum"));
             }
             if(request.getParameter("startDate") != null)
             {
               startDate = change.AsciiBean(request.getParameter("startDate").trim());
             }
             if(request.getParameter("userName") != null)
             {
               userName = change.AsciiBean(request.getParameter("userName"));
             }
             if(request.getParameter("userTypeId") != null)
             {
               userTypeId = cn.ChangNum(request.getParameter("userTypeId"));
             }
             if(request.getParameter("builder") != null)
             {
               builder = change.AsciiBean(request.getParameter("builder"));
             }
             if(request.getParameter("re") != null)
             {
               re = change.AsciiBean(request.getParameter("re"));
             }
             aM2 = new M2( m2Id,
                           circuitName,
                           firstMachineHouseId,
                           endMachineHouseId,
                           systemCall,
                           systemNum,
                           startDate,
                           userName,
                           userTypeId,
                           builder,
                           re
                          );
              m2Service.insertM2(aM2,m2PortVector);          
              session.removeAttribute("vector");
              view = request.getRequestDispatcher("/servlet/citytelecom.Servlet.M2.FindAll");
              view.forward(request,response);
           }
        }
        catch  (Exception e)
          {
             status.addException(e);
             System.out.println(e);
          } }
      

  14.   

    这么长,头晕。你说只能看到最后一次的记录,可能的原因是:在每次提交后你没有创建新的元素加入,Vector的add只是加引用,如果你每次用同一个对象,当然是只有一个元素了。是不是作为servlet的全局了?是不是没有new一个对象再加入,等等,还是你自己看一下吧。
    -----------
    我是燕赤霞,替人办事是要收钱的。
      

  15.   

    大体上看了你的code 想问一下:如果你是在form2中每提交一次就调用一次这个servlet(也就是说新建了一个Vector的对象m2PortVector,虽然都叫
    m2PortVector,但事实上没调用一次servlet,就新建了一个。没有对先前的进行存储。具体如何解决,就看看老前辈的办法吧。
      

  16.   

    是新建了一个,但是通过
        if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
        }
    得到一切保存的vector
    程序简化如下:
    response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(true);
        response.addHeader("Pragma","No-cache");
        response.addHeader("Cache-Control","no-cache");
        response.addDateHeader("Expires",1);
        AsciiBean change=new AsciiBean();
        ChangNum cn =new ChangNum();
        RequestDispatcher view = null;
        Status status = new Status();
        String bat = request.getParameter("bat");
        request.setAttribute("status",status);    Vector m2PortVector = new Vector();
        if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
        }
      

  17.   

    是新建了一个,但是通过
        if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
        }
    得到一切保存的vector
    程序简化如下:
        HttpSession session = request.getSession(true);
        response.addHeader("Pragma","No-cache");
        response.addHeader("Cache-Control","no-cache");    
        RequestDispatcher view = null;
        
        Vector m2PortVector = new Vector();
        if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
        }
        if(bat.equals("con"))//jsp继续提交form2
        {
           m2Port = new  M2Port(.,.,.,.,..);
             m2PortVector.add(m2Port);
             session.setAttribute("vector",m2PortVector);
             view = request.getRequestDispatcher("/M2Jsp/Insert.jsp");//返回jsp
             view.forward(request,response);
           }
           if(bat.equals("fns"))//jsp完成提交
           {
              m2Port = new  M2Port(.,.,.,.,..);
             m2PortVector.add(m2Port);
             am2 = new  M2(.,.,.,.,..);
             m2Service.insertM2(aM2,m2PortVector);
          }
      

  18.   

    从你的程序和描述的现象看,是有些奇怪。因为即便是插入相同的对象,vector的size也会增加的。
    感觉上象是,每次都没有从session中取到保存的vector,所以每次都是新建的m2PortVector,因此vector的size就是1。
    你可以增加这样的系统输出看看:
    if(session.getAttribute("vector")!=null)
        {
          m2PortVector=(Vector)session.getAttribute("vector");
          //add:
          System.out.println("Get m2PortVector from Session(Id:"+session.getId()+"). The size is:"+m2PortVector.size());    }
    首先,你看看有没有这句输出,如果有,再看看Session的Id是否相同;最关键是看看每次vector的size到底有没有增加!另外你的serial有什么意义啊?每次的初值都是0,然后加1存入(没有起到累加的作用)。
      

  19.   

    这个问题你也可以JScript + DHtml 实现。用JScript在客户端生成一颗DOM树,附表录入的每一条数据都先保存在客户的DOM树中,也可以将主表信息保存在同一颗DOM树中。最终提交时:可以以XML文件的方式提交,也可以以字符串的形式提交。
    到后台,对这颗树进行解析。数据同时保存在数据库中。这样做的优点在于:
    1、录入的附表数据在未提交之前可以方便修改和删除。
    2、数据便于管理。