繁体   English   中英

错误提交后将数据保存在表单中(JSP/Java)

[英]Save data in form after wrong submit (JSP/Java)

如何防止jsp表单被重置? 我有一个将数据传递给 servlet 的 jsp 表单。 如果用户在未填写所有字段的情况下按下“提交”,则会显示一条错误消息,邀请用户填写表单的所有字段。 问题是出现错误信息时,用户在表单中输入的数据被清除了。 我怎样才能确保保存这些数据并且用户不必再次重写所有内容?

我的意思是它必须是一种允许我保持表单填写的方法,因为它必须工作,例如,即使所有字段都已填写并且电子邮件字段没有@ 符号。

这是我的jsp:

Aggiungi un nuovo contto

<form method="POST"  action="AggiungiPersona.do">


    Id: <input type="number" size="40 maxlength=40" name="id" required /><br />
    Nome: <input type="text" size="40 maxlength=40" name="nome" required /><br />
    Cognome: <input type="text" size="40 maxlength=40" name="cognome" required /><br />
    Anni: <input type="number" size="40 maxlength=40" name="anni" required /><br />
    Sesso: <input type="text" size="40 maxlength=40" name="sesso" required /><br />
    Indirizzo: <input type="text" size="40 maxlength=40" name="indirizzo" required /><br />
    Numero di telefono: <input type="text" size="40 maxlength=40"
        name="numTel" required /><br /> 
    Email: <input type="text"
        size="40 maxlength=40" name="email" required /><br /> 
    <br> <input type="submit" value="crea contatto">

 </form>



<c:choose>


    <c:when test="${error==true}">
        <h3>Errore</h3>
        <p>Attenzione! Inserire un'età compresa tra 0 e 100.</p>
        <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>

    <c:when test="${error2==true}">
        <h3>Errore</h3>
        <p>Attenzione! L'id che si sta cercando di inserire è già
            presente in database. Scegliere un id diverso.</p>
            <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>

    <c:when test="${error3==true}">
        <h3>Errore</h3>
        <p>Attenzione! Il valore associato a "sesso" può essere solo "m",
            "M", "f", "F".</p>
            <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>

    <c:when test="${error4==true}">
        <h3>Errore</h3>
        <p>Attenzione! Il numero di telefono può contenere solo numeri.</p>
        <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>

    <c:when test="${error5==true}">
        <h3>Errore</h3>
        <p>Attenzione! L'email deve contenre il simbolo '@'.</p>
        <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>
    
    <c:when test="${error6==true}">
        <h3>Errore</h3>
        <p>Attenzione! Tutti i campi del form devono essere compilati.</p>
        <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
    </c:when>

    <c:when test="${successo==true}">
        <h3>Aggiunto nuovo contatto!</h3>

        <p>
            Id:
            <% String id = request.getParameter("id"); out.print(id); %>
            <br /> Nome:
            <% String nome = request.getParameter("nome"); out.print(nome); %>
            <br /> Cognome:
            <% String cognome = request.getParameter("cognome"); out.print(cognome); %>
            <br /> Età:
            <% String anni = request.getParameter("anni"); out.print(anni); %>
            <br /> Sesso:
            <% String sesso = request.getParameter("sesso"); out.print(sesso); %>
            <br /> Indirizzo:
            <% String indirizzo = request.getParameter("indirizzo"); out.print(indirizzo); %>
            <br /> Numero di telefono:
            <% String numTel = request.getParameter("numTel"); out.print(numTel); %>
            <br /> Email:
            <% String email= request.getParameter("email"); out.print(email); %>

            <br> <br> <a href="./index.jsp">Torna alla HomePage</a> 
        </p>
        

    </c:when>

</c:choose>

这是我的 servlet:

/**
 * @see HttpServlet#HttpServlet()
 */
public AggiungiPersona() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
    
    // verifica se esiste una sessione già creata
            // se no: reindirizzo l'utente in login.html
            HttpSession session = request.getSession(false);
            
            if(session == null || session.getAttribute("loggedIn")==null || !session.getAttribute("loggedIn").equals(true)) {
               response.sendRedirect("login.jsp");
               
                return;
            }
            
            

    // prendo tutte le persone dal db e le metto in arrayList per poterci ciclare
    // sopra e controllare se l'id inserito esiste gia nella collezione

    ArrayList<Persona> listaPersone = null;
    listaPersone = PersonaQuery.getPersone();

    boolean found = false;

    if (request.getParameter("id") == "" || request.getParameter("nome") == ""
            || request.getParameter("cognome") == "" || request.getParameter("anni") == ""
            || request.getParameter("sesso") == "" || request.getParameter("indirizzo") == ""
            || request.getParameter("numTel") == "" || request.getParameter("email") == ""

    ) {
        request.setAttribute("error6", true);

        RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
        view.forward(request, response);

    } else if ((Integer.parseInt(request.getParameter("anni")) < 0)
            || (Integer.parseInt(request.getParameter("anni")) > 100)) {
        request.setAttribute("error", true);

        RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
        view.forward(request, response);

    } else if ((request.getParameter("sesso").charAt(0) != 'm') && (request.getParameter("sesso").charAt(0) != 'M')
            && (request.getParameter("sesso").charAt(0) != 'f')
            && (request.getParameter("sesso").charAt(0) != 'F')) {
        request.setAttribute("error3", true);
        RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
        view.forward(request, response);
    } else if (Pattern.matches("^[0-9]*$", request.getParameter("numTel")) == false) {
        request.setAttribute("error4", true);
        RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
        view.forward(request, response);
    } else if (!request.getParameter("email").contains("@")) {
        request.setAttribute("error5", true);
        RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
        view.forward(request, response);

    } else {
        for (Persona persona : listaPersone) {

            if (Integer.parseInt(request.getParameter("id")) == persona.getId()) {

                found = true;

                request.setAttribute("error2", true);
                RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
                view.forward(request, response);

            }
        }
        if (!found) {
            try {
                PersonaQuery.aggiungiPersona(Integer.parseInt(request.getParameter("id")),
                        request.getParameter("nome"), request.getParameter("cognome"),
                        Integer.parseInt(request.getParameter("anni")), request.getParameter("sesso"),
                        request.getParameter("indirizzo"), request.getParameter("numTel"),
                        request.getParameter("email"));

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            request.setAttribute("successo", true);
            RequestDispatcher view = request.getRequestDispatcher("aggiungiPersona.jsp");
            view.forward(request, response);
        }

    }

}

}

这在很大程度上取决于您的应用程序的设置方式。 有两种基本方法:

UI 验证如果您的 UI 知道哪些字段是必填字段,那么您可以阻止提交/发布,直到正确填写所有必填字段。 这可以减少服务器流量并有助于简化应用程序。

服务器端验证如何实现这一点取决于设置,但如果您的设置使用“发布、重定向、获取”方法,那么您需要确保将数据映射到为下一次获取做好准备的表单中。

不幸的是,如果不了解您的代码库的更多信息,我无法提供更多帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM