Spring MVC находит JSP представление, но не может отобразить - PullRequest
0 голосов
/ 06 мая 2020

У меня простая Spring MVC Java Структура приложения: Spring Версия 5.2.3 Я использую JSP как представления. (На данный момент только 2 - так супер просто). index. jsp и index2. jsp

По индексу. jsp Я выполняю некоторую аутентификацию. На index2. jsp - это представление после аутентификации пользователя.

Итак, index. jsp отображается нормально, когда я нажимаю URL-адрес в браузере. Я делаю кое-что, а затем у меня есть пост-вызов JQuery, который вызывает контроллер и передает ему несколько вещей. Вот вызов AJAX POST -

function validateLoginServerSide(eventObj) {
    var data = JSON.stringify({
        "UIDSignature": eventObj.UIDSignature,
        "firstName": eventObj.profile.firstName
    });
    $.ajax({
        url: 'cdc/validate',
        headers: {
           'Content-Type': 'application/json'
        },
        method: 'POST',
        dataType: 'text',
        data: data,
        success: function(data){
            console.log('succes: ' + data);
        },
        error: function(jqXHR, status, error) {
            console.log('error: ' + error);
        }
    });
}

Вот контроллер -

@RequestMapping(value = "/validate", method=RequestMethod.POST,
    consumes = {MediaType.APPLICATION_JSON_VALUE })
    public String validateAuthentication(
    @RequestBody CompanyBO signature, ModelMap model) {
    model.addAttribute("firstName", signature.getFirstName());
    return "index2"; // return internal application page
}

index2, как упоминалось ранее, это JSP и находится в следующем каталоге в моем project: src/main/webapp

Вот чего я не понимаю - обратите внимание в моем обратном вызове post в функции успеха - я распечатываю data.
Ну, в консоли моего браузера я вижу содержимое моего JSP (index2. jsp) идеально отформатировано html и даже та привязка, которая разрешена в firstName, которое я передал в этот метод, но само окно браузера все еще находится в исходном виде, index.jsp - поэтому новый jsp не отображается в окне браузера - но он НАЙДЕН, привязка разрешена, и, как вы увидите ниже в журналах, ПЕРЕСЕЛЕН.

Я провел небольшое исследование и заметил в некоторых сообщениях что нужно включить это в свой POM:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>...</version>
</dependency>

Версия зависит от версии Tomcat, которую вы используете (как указано в блогах) --- и причина этого в том, что S pring MVC не знает, как рендерить JSP без посторонней помощи. Для меня это имело смысл, поэтому я попробовал - но это не сработало. Все тот же результат.

И, наконец, просто чтобы доказать, что я не сумасшедший - вот несколько заявлений DEBUG от Tomcat (как и было обещано):

22:56:00.676 [http-apr-8080-exec-6] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Read "application/json" to [CompanyBO(UIDSignature=1234567, firstName=Alex)]
22:56:00.702 [http-apr-8080-exec-6] DEBUG org.springframework.web.servlet.view.InternalResourceView - View name 'index2', model {org.springframework.validation.BindingResult.companyBO=org.springframework.validation.BeanPropertyBindingResult: 0 errors, firstName=Alex}
22:56:00.702 [http-apr-8080-exec-6] DEBUG org.springframework.web.servlet.view.InternalResourceView - Forwarding to [/index2.jsp]
22:56:00.946 [http-apr-8080-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
22:56:06.014 [http-apr-8080-exec-8] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/company/resources/javascript/lib/bootstrap.bundle.js.map", parameters={}
22:56:06.072 [http-apr-8080-exec-8] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped to ResourceHttpRequestHandler ["/resources/"]
22:56:06.082 [http-apr-8080-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/company/resources/css/lib/bootstrap.min.css.map", parameters={}
22:56:06.084 [http-apr-8080-exec-9] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped to ResourceHttpRequestHandler ["/resources/"]
22:56:06.186 [http-apr-8080-exec-8] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
22:56:06.202 [http-apr-8080-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK

Вопрос на миллион долларов: Как если вид найден, возвращен, но не отрисован?

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