Обнаружение, если JSP загружается впервые - PullRequest
1 голос
/ 21 июня 2011

Я хочу реализовать одну страницу разметки JSP, которая будет иметь такую ​​форму:

JSP: formPay.jsp

<form action="<%=request.getContextPath() + "/Pay.do"%>" method="post" id="guest">
    <table>
        <tr>
            <td width="150"><span class="required">*</span> First Name:</td>
            <td><input type="text" name="firstname" value="<%= request.getAttribute("firstname") %>" />
            </td>
        </tr>
    [...]
    </table>
<input class="button" type="submit" value="Confirm" name="btnConfirm">
</from>

Сервлет: PayCommand.java

public class PayCommand implements Command {

    @Override
    public HttpServletRequest execute(HttpServletRequest request)
            throws ServletException, IOException {

        boolean errorWithField = false;

        String paramFirstName = "";
        String paramLastName = "";
        String paramEmail = "";
        String paramCity = "";
        String paramAddress = "";

        try {
            paramFirstName = request.getParameter("firstname");
            paramLastName = request.getParameter("lastname");
            paramEmail = request.getParameter("email");
            paramCity = request.getParameter("city");
            paramAddress = request.getParameter("address");
        } catch (Exception e) {
            request.setAttribute("jsp", "formPay");
            return request;
        }   

        if (paramFirstName==null || paramFirstName.equals("")) {
            errorWithField = true;
        }
        if (paramLastName==null || paramLastName.equals("")) {
            errorWithField = true;
        }
        if (paramEmail==null || paramEmail.equals("")) {
            errorWithField = true;
        }   
        if (paramCity==null || paramCity.equals("")) {
            errorWithField = true;
        }
        if (paramAddress==null || paramAddress.equals("")) {
            errorWithField = true;
        }

        // if errorWithField==true, reload the formPay.jsp
        if (errorWithField) {
            request.setAttribute("message", "You have to fill out all of the fields.");

            request.setAttribute("jsp", "formPay");
            request.setAttribute("firstname", paramFirstName);
            request.setAttribute("lastname", paramLastName);
            request.setAttribute("email", paramEmail);
            request.setAttribute("city", paramCity);
            request.setAttribute("address", paramAddress);

        } else {           
            // if not, go to the confirm page, everything is ok.
            request.setAttribute("jsp", "confirmation");
            request.setAttribute("firstname", paramFirstName);
            request.setAttribute("lastname", paramLastName);
            request.setAttribute("email", paramEmail);
            request.setAttribute("city", paramCity);
            request.setAttribute("address", paramAddress);
        }
        return request;
    }
}

Проблема в том, что когда JSP загружается в первый раз, я бы хотел, чтобы он интерпретировался так, как если бы не было ошибки, но errorWithField оказывается true, поэтому сообщение об ошибке отображается еще до того, как получает возможность заполнить форму.

Вторая проблема заключается в том, что JSP примет значения для полей, которые были заполнены, но вернет null, если там ничего не было, включая первую загрузку JSP. Как я могу решить эту проблему?

EDIT Обратите внимание, что действие формы Pay.do перенаправлено на PayCommand.java, что относится к шаблону Front Controller. (не показано)

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Вы можете добавить скрытое поле в форму и проверить, имеет ли оно значение.Если это так, то форма отправляется обратно;в противном случае это первая загрузка (и вы должны пропустить проверку ошибок).

2 голосов
/ 21 июня 2011
  1. Первый вопрос, я думаю, что вы можете использовать другое действие .do только для пересылки на страницу jsp без установки атрибута errorWithField равным true.
  2. Второй вопрос, вы можете попробовать это:

    <% = request.getAttribute ("firstname") == null? "": request.getAttribute ("firstname")%>

...