2017-02-17 17 views
4

Я новичок в Struts 2. Я хочу отправить массив javascript в класс действия Struts с помощью запроса jQuery AJAX.
Предупреждение работает нормально, execute() не работает.
Когда я поставил System.out.println("language : "+ language); в методе execute(), выходКак отправить массив javascript в действие struts с помощью jQuery Ajax

язык: null.

var langArr = []; 
    $("#language").each(function() 
    { 
     var selectedLang = $("select").val(); 
     var selectedValues = $(this).val(); 
     langArr.push(selectedValues); 
    }); 
    alert("Languages : " + langArr); 

    $.ajax({ 
     method: "POST", 
     url: "getProjectPost", 
     data: { "language" : langArr }, 
     dataType : "json", 
     traditional: true, 
     success: 
      function() 
      { 
      alert("Success"); 
      }, 
     error: 
      function() 
      { 
      alert("Error"); 
      } 
    }); 

Это мой класс действия

public class ProjectPostAction { 

    private int[] language; 

    public final int[] getLanguage() { 
     return language; 
    } 

    public final void setLanguage(int[] language) { 
     this.language = language; 
    } 

    public String execute() throws Exception {   
      System.out.println("language : "+ language[0]); 
      return "success";  
    } 
+0

Что напечатано в предупреждении? –

ответ

2

Jquery упорядочивает данные, переданные в качестве параметров с помощью $.param внутренне при выполнении Ajax запроса с $.ajax.

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

Вы можете отправить параметр массива в struts2 только с настройкой traditional, потому что struts используют преобразование типа для заполнения свойства действия с использованием ключей в качестве имен параметров.

Итак, массив должен быть массивом примитивных целых чисел, но ваш массив содержит другие объекты, которые не являются примитивными целыми числами.

Чтобы продемонстрировать это, вы можете увидеть это demo, чтобы понять, как получить значения параметров и сериализовать его так же, как делает $.ajax.

Struts2 также может преобразовывать строку, содержащую значения, разделенные запятой, по умолчанию преобразования типов. Например, вы можете увидеть how checkbox list values are passed to struts action.

0

Чтобы использовать JSON с Struts2, лучшим вариантом является импорт Struts2 JSON plugin.

Затем

  1. вы получите автоматическое преобразование JSON при экспонировании данных от действия к в JSP, используя JSon Результатas described here, НО
  2. вам нужно включить Json Interceptor в вашем стеке перехватчика, чтобы преобразование JSON от JSP до действие, as described here и here.