У меня простая 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
Вопрос на миллион долларов: Как если вид найден, возвращен, но не отрисован?