Статьи

Использование Struts 2 с JSON и jQuery

Потребовалось немало времени, чтобы понять, как настроить стойки 2 с помощью JSON. и как извлечь данные с помощью jQuery. Итак, я подумал, что мне лучше записать материал, который я выучил, и просто переформулировать правила, какими бы они ни были, чтобы я или кто-то другой мог их перепроверить при написании кода.

Есть несколько вещей, которые необходимо сделать, чтобы использовать JSON со структурами 2. По сути, структуры предоставляют вам несколько типов результатов. Для JSON вам потребуется новый тип результата, потому что, очевидно, поскольку ответ является ответом JSON, у вас нет страницы для перенаправления.

Итак, сначала вам нужно скачать плагин JSON, если у вас его нет в загрузке. Как обычно, храните его в папке lib вашего приложения.

Плагин JSON Struts 2 позволяет создать действие, которое можно сериализовать в объект JSON. Хорошо, в основных терминах это означает, что в ответе, отправляемом обратно клиенту, ответом является объект Javascript, представляющий класс Action, а атрибуты объекта javascipt фактически названы в честь открытых методов получения объекта действие. Если значение любого метода получения возвращает ноль, значение атрибута javascript будет нулевым, и наоборот.

Плагин обрабатывает не только основные типы, но и сложные типы, такие как списки и массивы. Вскоре мы увидим фрагмент кода.

Обо всем по порядку. Давайте посмотрим, что нужно сделать для настройки нашего действия для JSON.

Храните json-плагин в вашем каталоге Lib

В Struts.xml создайте новый пакет, который расширяет json-default. Если вы хотите использовать существующий пакет, вы можете просто использовать разделенное запятыми значение для имен пакетов в качестве значения параметра extends тега пакета. Это то, что я буду делать здесь. (СОВЕТ: пакет json-default расширяет Struts-default.)

Укажите тип результата вашего класса действий, который будет «JSON»

Это почти все, что вам нужно сделать, чтобы все пошло с точки зрения конфигурации стойки.

Пакет json-default содержит перехватчик и конфигурацию типа результата для запросов и ответов JSON.

Теперь давайте перейдем к коду.

  1. С точки зрения браузера: jQuery
    jQuery позволяет вам выполнить запрос ajax, который ожидает объект JSON в качестве ответа метода getJSON. Как и все другие запросы Ajax, синтаксис для вызова тот же. Вам нужно передать url, объект javascript, представляющий параметры формы, и функцию, которая будет вызываться при возврате вызова. В возвращенной функции данные, возвращаемые с сервера, могут рассматриваться как объект JSON.
  2. С точки зрения сервера: Struts 2 
    Все, что вам нужно сделать, — это создать переменные экземпляра и соответствующие методы getter и setter для переменных, к которым нужно обращаться через javascript. Оказавшись в методе execute, вы можете просто установить значения этих переменных экземпляра. Затем необходимо настроить действие так, чтобы оно возвращало объект json в файле конфигурации Struts.

Здесь следует отметить, что все переменные, которые имеют установщик, могут быть установлены в значения, полученные параметрами формы. И все переменные, которые имеют метод получения, могут быть получены в коде JavaScript клиента.

В следующих разделах кода мы увидим, как мы можем обрабатывать не только простые типы данных, но также списки и карты как объекты JSON.

Сначала HTML. Это обычная форма, которая не содержит ничего, кроме текстового поля для ввода имени пользователем. Действие Struts, которое мы напишем, будет просто использовано, чтобы передать пользователю привет.

<form action="" id="introForm"><label for="name">Enter Your Name</label>            <input name="name">            <input type="submit">        </form>

Идентификатор формы — introForm. Давайте обработаем событие отправки этой формы в коде, чтобы вернуть false, поскольку мы не хотим никуда идти, когда пользователь отправляет. Все действия должны оставаться на этой странице.

$(function(){ $("#introForm").submit(function(){   return false; }); });

Итак, теперь, когда мы знаем, что действие останется здесь, нам нужно сериализовать входные данные формы и отправить запрос на сервер с входными данными формы. Но прежде чем мы это сделаем, мы должны сначала создать класс действия, а затем настроить действие и его URL-адрес в файле конфигурации Struts. Итак, давайте прыгнем в сторону кода сервера за один раз.

Создать класс действий так же просто, как и раньше. Поскольку это демонстрационная версия, я создал несколько переменных экземпляра типа List и Map и заполню их некоторыми фиктивными значениями, чтобы позже их можно было получить с помощью javascript. Также обратите внимание, что для всех моих переменных экземпляра я создал методы получения, чтобы их значения могли быть получены.

public class AjaxActions extends ActionSupport{    private String name;    private String greeting;    private List<string> countryList;    private Map<string,long> countryMap;    public String sayHi(){                greeting="HI " +name;        countryList=new ArrayList();        countryList.add("US");        countryList.add("UK");        countryList.add("Russia");        countryMap= new HashMap();        countryMap.put("US",1L);        countryMap.put("UK",2L);        countryMap.put("Russia",3L);        return ActionSupport.SUCCESS;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getGreeting() {        return greeting;    }    public void setGreeting(String greeting) {        this.greeting = greeting;    }    public List<string> getCountryList() {        return countryList;    }    public void setCountryList(List<string> countryList) {        this.countryList = countryList;    }    public Map<string, long=""> getCountryMap() {        return countryMap;    }}</string,></string></string></string,long></string>

Итак, в основном, что я сделал здесь в функции sayHi (), это инициализировал приветствие вызова переменной экземпляра, которое говорит привет пользователю. Затем я заполнил фиктивный список с именами нескольких стран. Затем я заполнил фиктивную карту кодами этих стран. Моя цель — получить greetig, список и карту действия из кода javascript.

В файле конфигурации Struts следующих строк будет достаточно для настройки действия JSON.

<struts>    <package extends="struts-default,json-default" name="ajax-package" namespace="/ajax">                    <action class="sample.AjaxActions" method="sayHi" name="sayHi">                <result type="json">            </result></action>    </package></struts>

Теперь мой код на стороне сервера готов.

Возвращаясь к коду javascript, я просто собираюсь напечатать значения на консоли Firefox, вы можете делать все, что захотите!

$(function(){ $("#introForm").submit(function(){    var formInput=$(this).serialize();    $.getJSON('ajax/sayHi.action', formInput,function(data) {      $('.result').html('' + data.greeting + '');   $.each(data.countryList,function(index, value){    console.log("value " + value);   });   $.each(data.countryMap,function(key, value){    console.log("key "+ key + ", value " + value);   });  });  return false; }); });

Это делает это! Наконец, что не менее важно, большое спасибо программистам за написание такого простого в использовании плагина. Слава всем вам!

Удачного программирования 🙂

 

От http://mycodefixes.blogspot.com/2011/01/using-struts-2-with-json-and-jquery.html