如果jsp表单中有错误并且我们想在jsp页面上显示正确的错误消息那么我们应该在jsp页面或servlet中处理该错误
答案 0 :(得分:0)
绝对不在jsp中
最好是在servlet中
理想情况下,在Servlet调用的辅助类中
我将尝试草拟一个简短的例子:
在Servlet类中
// within the doPost method
String email = request.getParameter("email");
String password = request.getParameter("password");
FormValidator fm = new FormValidator();
fm.validateLogin(email, password);
// the errors attribute will contain a HashMap (returned by
// the getter method) containing error String literals
request.setAttribute("errors", fm.getInlineErrors());
request.getRequestDispatcher("formpage.jsp").forward(request,response);
在FormValidator类(助手类)
中private HashMap<String, String> errors = new Hashmap<String, String>();
// set empty inline errors in the constructor
public FormValidator(){
errors.put("emailError", "");
errors.put("passwordError", "");
// add other errors for register form...
}
public HashMap<String, String> getInlineErrors(){
return errors;
}
public void validateLogin(String email, String password){
// put your validation code here
// set inline errors accordingly
}
// create validateRegister() method
在Jsp上
<form action="Servlet" method="post">
<input type="text" name = "email" value="${email}"/> ${errors['emailError']}
<input type="text" name = "password" value="${password}"/> ${errors['passwordError']}
<input type="submit" value="Log in"/>
</form>
注意:
你不必为你的错误使用HashMap,你可以只使用一个arraylist或一个数组......我只是喜欢一个HashMap,所以可以使用String键来访问字段而不是数字索引,以避免&#34;魔术数字&#34;在Jsp页面上
您可能会对注册表单而不是登录使用内联错误,但登录表单在此处实施的速度更快
我没有放任何HTML标签,您可能想要添加它们
虽然这种方法不能在单个应用程序中提供大规模的重用,因为您的Web应用程序通常只有2个表单(注册和登录),但它允许将表单验证逻辑封装在自己的应用程序中使servlet更轻量级的类:servlet主要负责在应用程序中路由流量。