java - JSP 验证和重定向 : how to validate form input and forward the errors back to the original page?

标签 java jsp validation

我正在上 JSP 类(class),我有一项作业...我们必须编写一个 JSP 页面来接受用户输入,验证输入,然后将其转发到不同的网站。更准确地说,我们被要求实现 Amtrak 网站的 FareFinder 功能的基本版本。

这项任务有两个主要目的:
(a) 编写作为中间件的JSP;
(b) 编写验证表单数据的 JSP。

我有一个关于验证原则的一般性问题。目前我有一个 JSP,它有一个表单和一个提交按钮。当用户单击提交按钮时,我将它们转发到 Validate.jsp。然后 Validate.jsp 将验证数据,如果输入正确,它将自动将请求重定向到 Amtrak 网站并填写所有参数。

FareFinder.jsp -> Validate.jsp -> 美铁
(点击文件名可以看到我所有的代码)

简而言之,我正在做的主要事情 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
%>

我有几个问题:
如何从 Validate.jsp 返回 FareFinder.jsp 并反射(reflect)在验证页面中发现的错误?
一旦发现错误 - 我是否会将响应重定向回 FareFinder.jsp?
我如何将错误传回 FareFinder.jsp?

通用答案也可以,但我以我的代码为例。

注意:验证必须在服务器端进行,我不能使用javascript。

最佳答案

好的,根据评论,Servlets 也包括在内。现在,创建一个并实现 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 中的此 servlet 映射到 /validateFareurl-pattern 上,以便您可以通过 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 已经指向 servlet。输入值中的 ${param.origin} 将通过在后台执行 request.getParameter("origin") 来保留提交的值。 ${errors.origin} 将通过粗略地执行 pageContext.findAttribute("errors").get("origin") 来显示任何相关的错误消息。

这一定会让您入门 :) 祝您好运。

关于java - JSP 验证和重定向 : how to validate form input and forward the errors back to the original page?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231817/

相关文章:

java - 如何关闭 tomcat catalina.out 文件的调试和信息日志?

java - 从 Java 转移到 C++

Spring安全认证: get username without SPRING_SECURITY_LAST_USERNAME

javascript - Yii2 中表单验证后的回调 Javascript 函数

java - 解耦模型和输入检查

java - 什么是修改后的构建器模式?

java - 从jsp EL调用HashMap?

java - apache tomcat 出现奇怪的错误?

javascript - 如何根据选定的复选框验证表值

java - 解析 ArrayList 中的 ArrayList 不起作用。