无法显示多个错误消息。 Java Servlet

时间:2015-06-01 19:17:37

标签: java jsp servlets

我正在使用Java servlet和JSP创建登录页面。我只是发布了我的doPost方法和validateData方法。我担心的是我想在页面上输出两个以上的错误消息。 errorMessageList是负责保存String消息的数组。最初,我试图通过在两个字段中输入数字来输入无效的名字和姓氏。相应的错误消息存储在数组中,但不会显示。只显示第一个错误消息 错误:名字无效。不能为空/包含数字但下一个错误 错误:姓氏无效。即使errorMessageList已经存在,也不能显示空/包含数字。我也提供我的JSP。一些帮助将不胜感激!

     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    // We are creating all the parameters on the browsers and sending them to the server 
    String uName = req.getParameter("userName");
    String pWord = req.getParameter("password");
    String cPass = req.getParameter("confirmPassword");
    String fName = req.getParameter("firstName");
    String lName = req.getParameter("lastName");
    String gender = req.getParameter("gender");

    Client client = new Client();
    client.setClientName(uName);
    client.setPassword(pWord);
    client.setConfirmPassword(cPass);
    client.setFirstName(fName);
    client.setLastName(lName);
    client.setGender(gender);


    List<String> errorMessageList = validateServlet(client);
    boolean isEmpty = errorMessageList.isEmpty(); 
    System.out.println("the errorMessageList is empty:"+isEmpty);

    if(errorMessageList.size()==0){//Successful registration

        ClientDao clientDao = new ClientDaoImpl();
        clientDao.createClient(client);
        req.getRequestDispatcher("/WEB-INF/jsp/registrationSuccess.jsp").forward(req, resp);

    }

    // Error in the submission data. Therefore show registration page. 
    for(int i = 0; i < errorMessageList.size(); i++){
    req.setAttribute("errorMessages", errorMessageList.get(i));
    req.getRequestDispatcher("/WEB-INF/jsp/registration.jsp").forward(req, resp);
    }


    super.doPost(req, resp);
}

public List<String> validateServlet(Client client){

    List<String> errorMessages = new ArrayList<String>();


    if(client.getClientName() == null || client.getClientName().trim().length() == 0){// Null or Empty

        errorMessages.add("Error: Your forgot to type in User Name");

    }

    if(client.getFirstName() == null || client.getFirstName().trim().length() == 0 || client.getFirstName().matches(NUMBERS_PATTERN)){

        errorMessages.add("Error: Invalid First Name. Cannot be empty / contain numbers");

    }
    if(client.getLastName() == null || client.getLastName().trim().length() == 0 || client.getLastName().matches(NUMBERS_PATTERN)){

        errorMessages.add("Error: Invalid Last Name. Cannot be empty / contain numbers");

    }else if(!client.getClientName().matches(EMAIL_PATTERN)){

        errorMessages.add("Error: Invalid user. User Name should be user@domain.com");

    }else if(client.getPassword() == null || client.getPassword().trim().length() == 0){// Null or Empty

        errorMessages.add("Error: Your forgot to type in Password");

    }else if(client.getConfirmPassword() == null || client.getConfirmPassword().trim().length() == 0){// Null or Empty

        errorMessages.add("Error: Your forgot to confirm password");

    }else if(!client.getPassword().equals(client.getConfirmPassword())){

        errorMessages.add("Error: Password and confirm password do not match..");

    }       
    return errorMessages;
}


 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"      "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Client Registration Page</title>
</head>
<body style="background-color:#EEFFEE" align="center">
<%

   String eMessage = (String)request.getAttribute("errorMessages");
%>
<form action = "/iservlet-webapp/registration" method = "post">
     <%if(eMessage != null){ %>
        <div style = "color:#CC3300; align:center">
            <%=eMessage%>
        </div>  
     <%} %>


<font face="Arial" color="green">User Registration Page</font>
<hr>
<br>
<table align="center" border="1" bordercolor= "green" bgcolor="CCFF99">
    <tr>
        <td>User Name</td>
        <td><input type ="text" name ="userName" maxlength = "50"/></td>
    </tr>
    <tr>
        <td>Password</td>
        <td><input type ="password" name ="password" maxlength = "15"/></td>
    </tr>
    <tr>
        <td>Confirm Password</td>
        <td><input type ="password" name ="confirmPassword" maxlength = "45"/></td>
    </tr>
    <tr>
        <td>First Name</td>
        <td><input type ="text" name ="firstName" maxlength = "45"/></td>
    </tr>
    <tr>
        <td>Last Name</td>
        <td><input type ="text" name ="lastName" maxlength = "45"/></td>
    </tr>
    <tr>
        <td>Gender</td>
        <td><input type ="text" name ="gender" maxlength = "1"/></td>
    </tr>
    <tr>
        <td colspan="2"><input type = "submit" name ="Login"/></td>
    </tr>
</table>
</form>
</body>
</html>

1 个答案:

答案 0 :(得分:5)

 // Error in the submission data. Therefore show registration page. 
    for(int i = 0; i < errorMessageList.size(); i++){
    req.setAttribute("errorMessages", errorMessageList.get(i));
    req.getRequestDispatcher("/WEB-INF/jsp/registration.jsp").forward(req, resp);
    }

使用上面的代码,您只需设置1 error列表的0th索引,因为您在每次迭代时都调用forward()方法。

相反,您应该将完整的errorList添加为属性:

req.setAttribute("errorMessages", errorMessageList);
req.getRequestDispatcher("/WEB-INF/jsp/registration.jsp").forward(req, resp);

现在只需在JSP中迭代列表。

<强>更新

如何在JSP中迭代列表?

<c:forEach items="${errorMessages}" var="error">
    <h2>${error}</h2>
</c:forEach>

要使用<c:forEach>,您需要在类路径中添加jstl.jar并在jsp中添加以下行。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>