从JSP转到Servlet,然后回到相同的JSP,字段为空

时间:2012-09-18 00:55:41

标签: javascript jsp servlets

我需要从我的JSP转到我的Servlet,然后回到同一个JSP。问题是,当我回来时,我的所有文本字段都是空的。

我该如何解决这个问题?注意:

  1. 表单有method='post' enctype='multipart/form-data'
  2. 我正在使用按钮提交。它们是执行javascript函数onclick的普通按钮,此函数验证文本字段,如果一切正常,则调用submit()函数并提交表单。
  3. 使用此代码完成servlet的回复:

    RequestDispatcher rd = request.getRequestDispatcher("/altaPerfil.jsp");
    rd.forward(request, response);
    

  4. 其他信息:

    我的JSP页面与此类似:https://www.taringa.net/registro
    它有一个表单,表单内有7个文本字段,3个日期选择字段(与该页面完全相同),上传图像的上传字段,带两个字段的radioButton和3个按钮。
    其中一个按钮用于验证缺口和电子邮件字段(如果已经采用了缺口或邮件,则返回false,否则返回true,这在servlet中完成,因为我们尝试将逻辑与表示分开)。
    第二个按钮用于上传图像 第三个按钮用于发送所有表单(所有文本字段和日期) 前两个按钮必须转到servlet并返回JSP ...
    示例代码:
    (JSP)

    <form action="altaPerfilServlet" 
          name = "frmValidar" 
          method='post' enctype='multipart/form-data' >
    
        Nick:
        <br />
        <input type="text" name="nick" 
               id="nick" onkeypress="deshabilita()" 
               value="${requestScope.nick}" />
    
    <input type=button name="botonValidar" 
               id="botonValidar" value="Validar datos" 
               onclick="validarNick()" />
    <!--Note: the javascript validarNick() verifies the nick field and if it is -->
    <!--not empty then it calls frmValidar.submit()-->
    


    (适用的Servlet)

      FileItemFactory factory = new DiskFileItemFactory();  
      ServletFileUpload upload = new ServletFileUpload(factory);
    
      List<FileItem> fields = upload.parseRequest(request);
      Iterator<FileItem> it = fields.iterator();
    
      <!--here i process all the FileItems and obtain their values-->
      <!--then i talk to a java app (which acts as a server, providing -->
      <!--the data and a series of classes) and obtain a boolean value(esValido)-->
      <!--that tells me if the nick is available(true) or taken(false)-->
    
      <!--finally: -->
    
      request.setAttribute("esValido", esValido);<!-- saving the boolean -->
    
      String nick=request.getParameter("nick");
      request.setAttribute("nick", nick);
      RequestDispatcher rd = request.getRequestDispatcher("/altaPerfil.jsp");
      rd.forward(request, response);
    

1 个答案:

答案 0 :(得分:1)

<input>方法中阅读request中的doPost数据,并将<input>数据推送/绑定到请求范围。

sample.jsp


<form method="post" action="servlet_url">
  No   : <input type="text" name="no" value="${requestScope.no}"/>
  Name : <input type="text" name="name" value="${requestScope.name}"/>
  <input type="submit"/>
</form>

doPost中的代码,

String no=request.getParameter("no");
String name=request.getParameter("name");

//other statements

request.setAttribute("no",no);
request.setAttribute("name",name);

RequestDispatcher rd = request.getRequestDispatcher("/sample.jsp");
rd.forward(request, response);