Sebi
Sebi

Reputation: 4532

Sending a request and response from a jsp to a servlet

I am writing a validation servlet for a registration form. The form is in a .jsp file and has the following layout:

        <div class="content">
            <h2 class="form">Register</h2>
            <form action="Register">
                <p>
                    User name: <br />
                    <input type="text" name="username" /><br /> First Name: <br />
                    <input type="text" name="fist_name" /><br /> Last Name: <br />
                    <input type="text" name="last_name" /><br /> Email Address: <br />
                    <input type="text" name="email" /><br /> Password: <br />
                    <input type="password" name="password" /><br /> Retype password:
                    <br />
                    <input type="password" name="password2" /><br /> <input
                        type="submit" value="Register" />
                </p>
            </form>

            <!-- end .content -->
        </div>

The validation code should check that each field meets a set of constraints and write back to the jsp error messages if it doesn't.

ValidationServlet.java

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // get request parameters for username and password
        String user = request.getParameter("username");
        String firstName = request.getParameter("first_name");
        String lastName = request.getParameter("last_name");
        String email = request.getParameter("email");   
        String pwd = request.getParameter("password");
        String pwd2 = request.getParameter("password2");
        // Validate parameters and forward them to the ejb
        Map<String, String> messages = new HashMap<String, String>();

        if(user != null) {
            // Validate user name
            if(user.trim().isEmpty()) {
                messages.put("error", "Please enter username");
            } else if(!user.matches("^[a-zA-Z0-9]$")) {
                messages.put("error", "Invalid username.");
            } else if(user.length() > MAX_LEN){
                messages.put("error", "Invalid username");
            } else {
                // Username is valid
                messages.put("success", "good");
            }
        }
        if(firstName != null) {
            // Validate first name
            if(firstName.trim().isEmpty()) {
                messages.put("error", "Please enter your first name");
            } else if(!firstName.matches("^[a-zA-Z]$")) {
                messages.put("error", "Invalid name. Use alpha values only.");
            } else if(firstName.length() > MAX_LEN){
                messages.put("error", "Invalid name. Name should be at most " + MAX_LEN + " characters long");
            } else {
                // First name is valid
                messages.put("success", "good");
            }
        }
        if(lastName != null) {
            // Validate last name
            if(lastName.trim().isEmpty()) {
                messages.put("error", "Please enter your last name");
            } else if(!lastName.matches("^[a-zA-Z]$")) {
                messages.put("error", "Invalid name. Use alpha values only.");
            } else if(lastName.length() > MAX_LEN){
                messages.put("error", "Invalid name. Name should be at most " + MAX_LEN + " characters long");
            } else {
                // Last name is valid
                messages.put("success", "good");
            }
        }
        if (email != null) {
            // Email is specified as request parameter, do the business logic here.
            if (email.trim().isEmpty()) {
                messages.put("error", "Please enter email");
            } else if (!email.matches("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)")) {
                messages.put("error", "Invalid email, please try again.");
            } else {
                // Email is valid
                messages.put("success", "good");
            }
        }
        if(pwd != null) {
            // Validate password
            if(pwd.trim().isEmpty()) {
                messages.put("error", "Please enter password");
            } else if(pwd.length() > MAX_LEN){
                messages.put("error", "Invalid password");
            } else {
                // Password is valid
                messages.put("success", "good");
            }
        }
        if(pwd2 != null) {
            // Validate password
            if(pwd2.trim().isEmpty()) {
                messages.put("error", "Please enter password");
            } else if(pwd2.length() > MAX_LEN){
                messages.put("error", "Invalid password");
            } else if(!pwd2.equals(pwd)) {
                messages.put("error", "Passwords do not match");
            } else {
                // Password is valid
                messages.put("success", "good");
            }
        }
        // Put messages in request scope so that it's accessible in EL by
        // ${messages}.
        request.setAttribute("messages", messages);

        // Forward request to JSP for display.
        request.getRequestDispatcher("login.jsp").forward(request,
                response);
    }

My questions is how can I access each message from the hash map and display them accordingly before the respective input field in the jsp?

Upvotes: 0

Views: 3082

Answers (2)

Aniket Kulkarni
Aniket Kulkarni

Reputation: 12993

You need to change the key for each input field
e.g. for error messages

messages.put("user", "Please enter username");  //for user
messages.put("firstName", "Please enter your first name");  //for first_name 
.......
.......
.......

If you want to display success then you can set success in map otherwise do not.

To access message map on JSP

<form action="Register">
  <p>
     User name: <br />
       <input type="text" name="username" /><c:out value="${messages['user']}"/><br /> 
     First Name: <br />
        <input type="text" name="fist_name" /><c:out value="${messages['firstName']}"/><br /> 
     .........
     .........
     .........

     <input type="submit" value="Register" />
  </p>
</form>

See also

Upvotes: 5

user987339
user987339

Reputation: 10727

To access messages map use the following code:

<c:set var="what" value="error"/>
error: <c:out value="${messages[what]}"/>

Upvotes: 1

Related Questions