[Я пытался упростить код, чтобы лучше понять вопросы] Когда я пытался отправить данные из веб-клиента в 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.