Проверка и перенаправление JSP: как проверить ввод формы и переслать ошибки обратно на исходную страницу?
Я беру уроки по JSP и у меня есть задание... мы должны написать страницу JSP, которая принимает пользовательский ввод, проверяет ввод, а затем перенаправляет его на другой веб-сайт. Если быть более точным, нас попросили реализовать рудиментарную версию функциональности FareFinder веб-сайта Amtrak.
есть 2 основные цели этого назначения:
(a) написать JSP, который выполняет роль промежуточного ПО;
и (b) написать JSP, который проверяет данные формы.
I есть общий вопрос о принципах проведения валидации. В настоящее время у меня есть JSP, который имеет форму и кнопку отправки. Когда пользователь нажимает на кнопку отправки, я пересылаю их для проверки.JSP-страница. Проверка.затем jsp проверит данные, и если вход в порядке, он автоматически перенаправит запрос на веб-сайт Amtrak со всеми заполненными параметрами.
FareFinder.jsp ->проверка.jsp -> Железнодорожный
(нажмите на файл имя, чтобы увидеть весь мой код в pastie)
кратко, главное, что я делаю 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 ответов
OK, согласно комментариям, сервлеты также покрыты. Теперь создайте один и реализуйте 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
of /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
уже указывает на сервлет. The ${param.origin}
в входных значениях сохранит представленное значение, выполнив request.getParameter("origin")
под капюшонами. Этот ${errors.origin}
покажет соответствующее сообщение об ошибке примерно в pageContext.findAttribute("errors").get("origin")
.
это должно заставить вас начать :) удачи.