当用户提交错误的输入时,如何在同一个JSP中显示错误消息?我不打算抛出异常并显示错误页面。
答案 0 :(得分:7)
最简单的方法是在JSP中使用占位符来验证错误消息。
JSP /WEB-INF/foo.jsp
:
<form action="${pageContext.request.contextPath}/foo" method="post">
<label for="foo">Foo</label>
<input id="foo" name="foo" value="${fn:escapeXml(param.foo)}">
<span class="error">${messages.foo}</span>
<br />
<label for="bar">Bar</label>
<input id="bar" name="bar" value="${fn:escapeXml(param.bar)}">
<span class="error">${messages.bar}</span>
<br />
...
<input type="submit">
<span class="success">${messages.success}</span>
</form>
在您提交表单的servlet中,您可以使用Map<String, String>
来获取将在JSP中显示的消息。
Servlet @WebServlet("foo")
:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/foo.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> messages = new HashMap<String, String>();
request.setAttribute("messages", messages); // Now it's available by ${messages}
String foo = request.getParameter("foo");
if (foo == null || foo.trim().isEmpty()) {
messages.put("foo", "Please enter foo");
} else if (!foo.matches("\\p{Alnum}+")) {
messages.put("foo", "Please enter alphanumeric characters only");
}
String bar = request.getParameter("bar");
if (bar == null || bar.trim().isEmpty()) {
messages.put("bar", "Please enter bar");
} else if (!bar.matches("\\d+")) {
messages.put("bar", "Please enter digits only");
}
// ...
if (messages.isEmpty()) {
messages.put("success", "Form successfully submitted!");
}
request.getRequestDispatcher("/WEB-INF/foo.jsp").forward(request, response);
}
如果您创建更多JSP页面和servlet执行更少或更多相同的操作,并开始注意到这毕竟是大量重复的样板代码,那么请考虑使用MVC框架。
答案 1 :(得分:0)
我看到标签“form-validation”,所以也许您应该只使用JavaScript和客户端表单验证?如果需要使用JSP进行验证,请处理表单数据,并使用错误消息重新显示表单,或者接受表单数据(如果正确)。
答案 2 :(得分:-2)
我不太清楚你的意思&#34;显示错误信息&#34;。如果您有标准的错误处理,那么您可以随时检查选项:
<%
if(wrong option selected)
throw new Exception("Invalid option selected");
%>
当然,这只是一个概念;最好,你有自己的异常类。但话说回来,我不太确定你追求的是什么。