Принимают ли Struts 2 метод «POST» для отправки данных из javascript на сервер Action? - PullRequest
0 голосов
/ 16 декабря 2011

[Я пытался упростить код, чтобы лучше понять вопросы] Когда я пытался отправить данные из веб-клиента в ActionClass в Struts 2, например:

jQuery("#bedata").click(function(){ //Function for button "bedata"

 var postData = "SOME DATA TO SEND"

//Sendin data:
$.ajax({
    type: "POST", //Method to send the data. I would need "post" method as better option.
    url: "GuardaFila.action", //Action called to data treatament
    data : {
        jgGridData: postData, //PARAMETER jgGrdData with variable "postData" value
        customData: "someinfo" //Just another parameter called "customData" with more data,
    },


/** START: handlers for request. Not important for this trouble **/
    dataType:"json",
    contentType: "application/json; charset=utf-8",
    success: function(response, textStatus, xhr) {
        alert("success");
     },
    error: function(xhr, textStatus, errorThrown) {
        alert("error");
    }
/** END: handlers for the request. **/
});
});

Я хотел автоматически заполнить атрибуты "jgGridData" и "customData" из ActionClass, который вызывается при вызове "CargaTabla.action". Но если type это POST, он не работает. Просто изменив тип POST в типе отправки ajax, включив «GET», все работает нормально. Вызов методов-установщиков CargaTabla.action ActionClass для jgGridData и customData выполнен правильно.

Мой фрагмент кода struts.xml:

<action name="GuardaFila" method="guardarUsuario" class="org.json.JSONRespuestaTabla">
    <result name="success" type="json" />
</action>

Итак, действие GuardaFila в его методе «guardarUsuario» правильно вызывается в отладочном файле. Упрощенная версия ActionClass (org.json.JSONRespuestaTabla):

public class JSONRespuestaTabla extends ActionSupport{

String jgGridData = "Old data to be refilled from client";
String customData = "Old data to be refilled from client";

@Override
public String execute() {
    //Some stuff
    return SUCCESS;
}

//Getters and Setter of attributes.

public void setJgGridData(String resultado){
    System.out.append(resultado);
}
public String getJgGridData(){
    return this.jgGridData
}
public String getCustomData() {
    return customData;
}
public void setCustomData(String customData) {
    this.customData = customData;
}

//And the method called and defined in struts.xml (properly called)
public void guardarUsuario(){
   //Some stuff.
   return;
}

Ну так вот. Если Javascript отправляет параметры в режиме GET, SETTERS работают хорошо, и я могу получить «НЕКОТОРЫЕ ДАННЫЕ ДЛЯ ОТПРАВКИ» на моем ActionClass JSONRespuestaTabla, настроенные автоматически, готовые к работе. Но если JavaScript отправляет эти данные в режиме POST, Struts не вызывает сеттеры, и я не могу получить данные в класс, который обрабатывает действие.

Как это получается? Я не могу понять, почему это происходит.

Я использую плагин jquery, json и tile для стояков 2.

1 Ответ

0 голосов
/ 16 декабря 2011

Готово. Просто установите тип данных:

contentType: "application/x-www-form-urlencoded; charset=utf-8"

вместо

contentType: "application/json; charset=utf-8"
...