Проверка и перенаправление JSP: как проверить ввод формы и переслать ошибки обратно на исходную страницу? - PullRequest
7 голосов
/ 09 февраля 2010

Я беру урок по JSP, и у меня есть задание ... мы должны написать страницу JSP, которая принимает пользовательский ввод, проверить ввод и затем переслать его на другой веб-сайт. Точнее, нас попросили реализовать элементарную версию функциональности FareFinder на веб-сайте Amtrak.

Это назначение имеет 2 основных цели:
(а) написать JSP, который выполняет роль промежуточного программного обеспечения;
и (b) написать JSP, который проверяет данные формы.

У меня есть общий вопрос о принципах проведения валидации. В настоящее время у меня есть JSP, который имеет форму и кнопку отправки. Когда пользователь нажимает кнопку «Отправить», я пересылаю их в Validate.jsp. Validate.jsp затем проверит данные и, если ввод в порядке, автоматически перенаправит запрос на веб-сайт Amtrak со всеми заполненными параметрами.

FareFinder.jsp -> Validate.jsp -> Amtrak
(нажмите на имя файла, чтобы увидеть весь мой код в картинке)

Вкратце главное, чем я занимаюсь FareFinder.jsp:

<FORM METHOD=POST ACTION="Validate.jsp">
    <!-- all the input fields are up here -->
    <P><INPUT TYPE=SUBMIT></P>
</FORM>

Главное, что я делаю в Validate.jsp:

<%@ page import="java.util.*" import="java.io.*"%>
<%
    // retreive all the parameters
    String origin = request.getParameter("_origin");
    String depmonthyear = request.getParameter("_depmonthyear");
    String depday = request.getParameter("_depday");
    String dephourmin = request.getParameter("_dephourmin");
    String destination = request.getParameter("_destination");
    String retmonthyear = request.getParameter("_retmonthyear");
    String retday = request.getParameter("_retday");
    String rethourmin = request.getParameter("_rethourmin");
    String adults = request.getParameter("_adults");
    String children = request.getParameter("_children");
    String infants = request.getParameter("_infants");
    String searchBy = request.getParameter("_searchBy");

    // validate the data

    // redirect to Amtrak or back to FareFinder.jsp
%>

У меня есть несколько вопросов:
Как мне вернуться в FareFinder.jsp из Validate.jsp и отразить ошибки, найденные на странице проверки?
Как только я обнаружил ошибки - я перенаправляю ответ обратно в FareFinder.jsp?
Как я могу передать ошибки обратно в FareFinder.jsp?

Общий ответ тоже подойдет, но я привожу свой код в качестве примера.

Примечание: проверка должна выполняться на стороне сервера, и я не могу использовать JavaScript.

1 Ответ

9 голосов
/ 09 февраля 2010

ОК, согласно комментариям, сервлеты также покрыты. Теперь создайте его и внедрите doPost() следующим образом (полупсевдо):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Map<String, String> errors = new HashMap<String, String>();

    String origin = request.getParameter("origin");
    if (origin does not validate) {
       errors.put("origin", "Put error message here.");
    }

    // Repeat for all parameters.

    if (errors.isEmpty()) {
        // No errors, redirect to Amtrak.
        response.sendRedirect("http://amtrak.com");
    } else {
        // Put errors in request scope and forward back to JSP.
        request.setAttribute("errors", errors);
        request.getRequestDispatcher("FareFinder.jsp").forward(request, response);
    }
}

Отобразите этот сервлет в web.xml на url-pattern из /validateFare, чтобы вы могли вызвать его с помощью http://example.com/context/validateFare.

Теперь сделайте в JSP что-то вроде:

<form action="validateFare" method="post">
    <label for="origin">Origin</label>
    <input id="origin" name="origin" value="${param.origin}">
    <span class="error">${errors.origin}</span>

    <!-- Repeat other fields here. -->
</form>

Вы видите, что форма action уже указывает на сервлет. ${param.origin} во входных значениях сохранит переданное значение, выполнив request.getParameter("origin") под капотами. ${errors.origin} покажет все связанные сообщения об ошибках, примерно выполнив pageContext.findAttribute("errors").get("origin").

Должно быть, вы начали :) Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...