Контроллер Spring MVC Отправляет / Получает данные на / из страницы jsp, которая использует ajax

#ajax #jsp #spring-mvc

#ajax #jsp #spring-mvc

Вопрос:

Как я могу получить простое сообщение (например, msg) из jsp/ajax in spring controller и вернуть response (например, resp) от контроллера обратно в jsp, в то время как jsp может получить этот ответ с помощью ajax и показать это в <div> ?

Возможно, следующий пример неверен, особенно часть ajax, спасибо за изменение:

вот мой контроллер:

     @RequestMapping("/testAjax")
    protected ModelAndView testActiveX(HttpServletRequest request,HttpServletResponse response){       
        ModelAndView model = new ModelAndView("test_Ajax");
        Date date=new Date();
        model.addObject("date",date.toString());
        return model;
    }
  

вот моя страница test_Ajax.jsp:

 <html lang="en">
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<head>
    <spring:url value="/resources/jquery-3.1.1.min.js" var="jqueryJs"></spring:url>
    <script src="${jqueryJs}"></script>
    <script >
        $(document).ready(function($)
        {
            $("#translate").click(translation());
        });
        function translation() {
            var words = $("input").val();
            $.ajax({
                url: '/WEB-INF/jsp/test_Ajax.jsp',
                data: {
                    word: words
                },
                success: function (data) {

                    $("#container").html(data);
                },
                type: 'GET'
            });
        }
    </script>
</head>
<body>
<input type="text" id="input" name="inputword"><br/><br/> <-- used to provide msg --%>
<button id="translate">Translate</button><br/><br/>
<div id="container"></div>
</body>
</html>
  

Ответ №1:

Как я вижу, у вас ошибка в URL-адресе вызова ajax, поскольку вы пытаетесь получить доступ к jsp внутри папки WEB-INF. Поскольку вы используете spring mvc с @RequestMapping, вы должны указать вызов ajax на URL, прослушиваемый этим отображением.

В вашем случае вы должны изменить URL-адрес, чтобы указать конечную точку сервлета, которая является субъектом, который предоставляет вам составленный HTML-код представления $.ajax({ url: ‘/testAjax’, data: { word: слова }, success: функция (данные) { $(«#container»).html(data); }, тип: ‘GET’ });

Возможно, могут быть другие ошибки, поскольку сопоставление вашего запроса может быть в контексте (так что вы можете связать RequestContext с URL-адресом сопоставления запросов.

Надеюсь, это поможет

Комментарии:

1. Я замечаю, что в этом примере могут быть ошибки. Я хочу знать решение, пожалуйста, приведите пример, который выполняется правильно. Я имею в виду, что на первом шаге, нажав на ajax-based кнопку jsp, контроллер получает указанное значение, а на втором шаге spring controller может манипулировать полученными данными и возвращать обработанные данные в jsp page , пока он может отображать с помощью ajax в <div>.

Ответ №2:

Опубликованный вами код должен работать с правильным URL-адресом в вызове ajax. Приложения Java имеют контекст (начало URI), поэтому вы должны помнить об этом при указании URL (вы можете использовать выражения jstl, такие как $ {ContextPath}, чтобы получить это значение, если вы используете спецификацию web 3.0).

Вы также можете получать параметры запроса (отправленные через post или get), добавляя параметры к методу контроллера и комментируя их с помощью @QueryParam, который получает имя параметра для сопоставления (это также работает со сложными объектами json, если у вас есть компонент JacksonMapper, определенный в контексте spring). Так, например. чтобы получить строку word, вы должны добавить

 @QueryParam("word") String word 
  

к сигнатуре метода.
Вы также можете напрямую работать с HttpServletRequest в этом методе и получать содержимое параметра следующим образом:

 String word = request.getParam("word");
  

внутри контроллера.

Комментарии:

1. Приведите мне пример, подобный моему вопросу, пожалуйста. Я хочу знать полный цикл между jsp и spring mvc с помощью технологии ajax.