jsp中的验证错误

时间:2016-04-15 05:37:45

标签: jsp servlets

如果jsp表单中有错误并且我们想在jsp页面上显示正确的错误消息那么我们应该在jsp页面或servlet中处理该错误

1 个答案:

答案 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>

注意:

  1. 你不必为你的错误使用HashMap,你可以只使用一个arraylist或一个数组......我只是喜欢一个HashMap,所以可以使用String键来访问字段而不是数字索引,以避免&#34;魔术数字&#34;在Jsp页面上

  2. 您可能会对注册表单而不是登录使用内联错误,但登录表单在此处实施的速度更快

  3. 我没有放任何HTML标签,您可能想要添加它们

  4. 虽然这种方法不能在单个应用程序中提供大规模的重用,因为您的Web应用程序通常只有2个表单(注册和登录),但它允许将表单验证逻辑封装在自己的应用程序中使servlet更轻量级的类:servlet主要负责在应用程序中路由流量。