Перенаправление на ту же страницу приводит к пустой странице - PullRequest
0 голосов
/ 17 июня 2020

Я создаю веб-приложение сервлета java, в котором я беру пользовательский ввод в index.jsp и показываю результат на странице result.jsp после действия POST. Перед отправкой формы я проверяю вводимые пользователем данные. Если обнаружена какая-либо ошибка проверки, я хочу, чтобы пользователь redirect перешел на ту же страницу index.jsp с сообщениями об ошибках. Но действие redirect приводит к пустой странице. Вот что я сделал до сих пор -

класс сервлета doPost метод -

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String name = req.getParameter("name");

    //this is just a dto class
    CovidQa covidQa = new CovidQa(name);

    CovidTestValidator validator = new CovidTestValidator();
    boolean hasError = validator.validate(covidQa, req);

    if (hasError) {
        req.getRequestDispatcher("/index.jsp").forward(req, resp);
    }

    req.getRequestDispatcher("/result.jsp").forward(req, resp);
}

валидатор validate метод -

public boolean validate(CovidQa covidQa, HttpServletRequest request) {
    boolean hasError = false;

    if (covidQa.getName() == null || covidQa.getName().equals("")) {
        request.setAttribute("nameErr", "Name can not be null");
        hasError = true;
    }

    return hasError;
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Covid-19</servlet-name>
        <servlet-class>CovidTest</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Covid-19</servlet-name>
        <url-pattern>/Cov</url-pattern>
    </servlet-mapping>

</web-app>

index.jsp -

<form action="Cov" method="post">
    //input fields
    <label>Name</label>
    <input type="text"
           id="name"
           name="name">
    <span>${nameErr}</span>

    <button type="submit">Submit</button>
</form>

1 Ответ

0 голосов
/ 17 июня 2020

req.getRequestDispatcher() не return из метода неявно. Если вы не укажете return явно, непосредственные строки также будут выполнены компилятором.
Как @ Balus C прокомментировал , система запуталась , выполнив два оператора req.getRequestDispatcher() последовательно.

Либо вам нужно return явно -

if (hasError) {
    req.getRequestDispatcher("/index.jsp").forward(req, resp);
    return;
}

req.getRequestDispatcher("/result.jsp").forward(req, resp);

, либо поместите более поздний в блок else -

if (hasError) {
    req.getRequestDispatcher("/index.jsp").forward(req, resp);
} else {
    req.getRequestDispatcher("/result.jsp").forward(req, resp);
}

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