[英]Save data in form after wrong submit (JSP/Java)
如何防止jsp表单被重置? 我有一个将数据传递给 servlet 的 jsp 表单。 如果用户在未填写所有字段的情况下按下“提交”,则会显示一条错误消息,邀请用户填写表单的所有字段。 问题是出现错误信息时,用户在表单中输入的数据被清除了。 我怎样才能确保保存这些数据并且用户不必再次重写所有内容?
我的意思是它必须是一种允许我保持表单填写的方法,因为它必须工作,例如,即使所有字段都已填写并且电子邮件字段没有@ 符号。
这是我的jsp:
<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.