Spring-код, возвращающий «представление», работает по-разному при использовании вызова Ajax из JS и при отправке POST с формой в JSP - PullRequest
0 голосов
/ 06 мая 2019

Я использую Ajax-вызовы JavaScript для конкретного requestMapping для возврата соответствующего «представления».В консоли видно, что диспетчерServlet завершен с ответом 200 ОК.Но это не распространяется оттуда;он не показывает вид, который должен показывать.

Тем не менее, при отправке из JSP POST с использованием формы, он вводит тот же requestMapping и возвращает правильное представление JSP, которое я хочу.

Я проверил отправляемый POST-пакет и выяснил, что при использовании JSP POST для contentType было явно задано значение «application / x-www-urlencoded», поэтому я применил то же самоедля Ajax с помощью ajaxSetup.Но все равно это не сработало.

Ajax Call

$.ajaxSetup({contentType: "text/plain; charset=UTF-8"});
$.ajax({
type:'post',
url: getContext() + '/auth',
processData:true,
data:{
      status: "authenticated"
}

})

main_menu.jsp

<script>
var user_name = "${username}"
</script>
- This JSP contains other JS codes in <script/> to follow

Код RequestMapping в @Controller

@RequestMapping(value = "/auth", method = RequestMethod.POST)
public String handleAuth(
        @RequestParam("status") String status) {
    if(status.equalsIgnoreCase("authenticated"))
        return "main_menu";
    return "";
}

Результат, когда "main_menu" было возвращено из requestMapping '/ auth' с использованием POST из вызова Ajax JavaScript

20:24:56.389 [http-nio-8080-exec-4] DEBUG 
org.springframework.web.servlet.view.JstlView - View name 
'main_menu', model {}
20:24:56.396 [http-nio-8080-exec-4] DEBUG 
org.springframework.web.servlet.view.JstlView - Forwarding to [/WEB- 
INF/views/main_menu.jsp]
20:24:56.492 [http-nio-8080-exec-4] DEBUG 
org.springframework.web.servlet.DispatcherServlet - Completed 200 OK

Результат, когда "main_menu" было возвращено из другого requestMapping, '/login 'Вы можете видеть, что другие файлы JS были вызваны методом GET из DispatcherServlet.Поле модели заполнено на этот раз.Когда я заполнил поле модели при использовании '/ auth' точно такой же вещью, это не сработало.

20:52:11.154 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.JstlView - View name 'main_menu', model {username=admin, org.springframework.validation.BindingResult.username=org.springframework.validation.BeanPropertyBindingResult: 0 errors, password=1111, org.springframework.validation.BindingResult.password=org.springframework.validation.BeanPropertyBindingResult: 0 errors}
20:52:11.154 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to [/WEB-INF/views/main_menu.jsp]
20:52:11.156 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
20:52:11.173 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/infosender/js/popup.js", parameters={}
20:52:11.174 [http-nio-8080-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/infosender/js/main_initialization.js", parameters={}
20:52:11.174 [http-nio-8080-exec-8] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/infosender/js/folderadd.js", parameters={}
20:52:11.174 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped to ResourceHttpRequestHandler ["/js/"]
20:52:11.174 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/infosender/js/keywordset_init.js", parameters={}
hello world!

1 Ответ

0 голосов
/ 25 мая 2019

Это была проблема из-за непонимания разницы между запросом формы и вызовом ajax.

Проще говоря, * запрос формы: при изменении вида (jsp или других html-шаблонов) * ajax call: когда передаются только данные (вид не изменяется)

Я надеюсь, что никто не запутается с этим вопросом, как я.

...