Я хочу передать данные json с jsp-страницы в класс действия с помощью ajax в jquery. Ниже приведен код jquery.
$.ajax({
type : 'POST',
url : contextPath+"/postData.action",
async: false ,
data :json,
dataType:"json",
contentType: 'application/json; charset=utf-8',
contentType: "application/json",
success : function(result) {
}
});
Follwing - это код класса действия:
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public String execute()
{
System.out.println(data);
return ActionSupport.SUCCESS;
}
Файл конфигурации Struts.xml
<action name="postData" class="demo.StoreJSONData" >
<result name="success">/jsp/output.jsp</result>
</action>
Код образца кода json:
{
"rectangle": {
"0": {
"id": "rectangle_1",
"displayData": "<div class=\"\" style=\"background: none repeat scroll 0% 0% rgb(255, 255, 255); width: 389px; height: 129px; position: absolute; left: 92px; top: 360px; border: 1px solid black; z-index: 4;\" id=\"rectangle_1\"></div>"
}
},
"eclipse": {
"0": {
"id": "eclipse_1",
"displayData": "<div class=\"\" style=\"position: absolute; z-index: 5; background-color: rgb(243, 239, 15); border: 1px solid black; width: 245px; height: 83px; border-radius: 50% 50% 50% 50%; left: 563px; top: 445px;\" id=\"eclipse_1\"></div>"
}
}
}
Не знаете, что именно вы хотите, и какие данные вы хотите отправить в действие Struts2. вот способ отправки данных JSON с использованием JQuery в действие Struts2
var arr = { value1: 'value1', value2: 'value2'}; // any size data
$.ajax({
url: 'action URL',
type: 'POST',
data: JSON.stringify(arr),
contentType: 'application/json; charset=utf-8',
dataType: 'json'
success: function(response) {
alert(response);
}
});
JSON.stringify
преобразует объект Java-скрипта в строку JSON, большая часть текущего браузера предоставит этот метод из коробки, но для старого вам может понадобиться другой способ, например json2.js и т.д.Struts2 уже предоставляет плагин для обработки данных JSON для вас, посмотрите на json-plugin, чтобы получить более подробную информацию об этом.
Пожалуйста, помните следующие моменты
result type="json"
action result type="json"
и проверить, что у вас есть json-плагин на вашем пути к классам, убедитесь, что у вас есть.Пожалуйста, обратите внимание на следующий вопрос, который даст вам более подробную информацию
Эй. Проблема в том, что вы непосредственно отправляете массив объектов. Так Struts2 не знает, какой метод вызывать. Измените данные json, как показано ниже. Тогда это сработает.
{"data":[{"id":"1","code":"111","name":"ddd"},
"id":"2","code":"222","name":"sss"},
{"id":"3","code":"333","name":"eee"}]}
Затем внутри сеттера, считанного с объектом
public void setData(List < Report > data) {
System.out.println("Setter Call Flow");
this.data = data;
}
Где Report - это класс java, содержащий id, code, name как его члены с сеттерами и getters.
Я предлагаю вам использовать плагин с более высоким уровнем (struts-jquery-plugin). Он поддерживает поддержку Ajax, и это то, что вы ищете.