안녕하세요, JSON을 Ajax에서 Struts2 액션 클래스 메서드로 게시하려고합니다. 좀 더 자세한 정보 : WAMP 서버와 Eclipse Tomcat의 Struts2에서 클라이언트를 실행하고 있습니다.JSON을 ajax에서 Struts2로 게시 조치
내 클라이언트 측 코드 :
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var dataObj = {
"data": [{
"id": "1",
"name": "Chris"
}, {
"id": "2",
"name": "Kate"
}, {
"id": "3",
"name": "Blade"
}, {
"id": "4",
"name": "Zack"
}]
};
var data1 = JSON.stringify(dataObj);
$(document).ready(function(){
$("button").click(function(){
$.ajax({url:"http://localhost:8080/Core/add",type: "post", data: data1, dataType: 'json', contentType:"application/json;charset=utf-8",async: true,success:function(result){
$("#div1").html(result);
}});
});
});
</script>
</head>
<body>
<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>
<button>Get External Content</button>
</body>
</html>
그리고 이것은 내 Java 응용 프로그램 물건입니다 :
struts.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="addMenu" namespace="/" extends="json-default">
<action name="registrate" class="com.coreRestaurant.menu.MenuAction">
<result type="json" >
<param name="root">json</param>
</result>
</action>
<action name="read" class="com.coreRestaurant.menu.MenuAction" method="readMenuById">
<result type="json" >
<param name="root">json</param>
</result>
</action>
<action name="add" class="com.coreRestaurant.menu.MenuAction" method="addMenu">
<result type="json" >
<param name="root">data</param>
</result>
</action>
</package>
</struts>
그리고 이것은 내 자바 코드 (MenuAction.java
)입니다 :
package com.coreRestaurant.menu;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class MenuAction extends ActionSupport implements ModelDriven<Menu>, Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Menu menu = new Menu();
private String json;
private List<Menu> data = new ArrayList<Menu>();
public String execute(){
MenuService menuService = new MenuService();
setJson(new Gson().toJson(menuService.getMenuNames()));
if(menuService.isDatabaseConnectionDown()==false){
return SUCCESS;
}else{
setJson(new Gson().toJson("Failed to connect to Database"));
return ERROR;
}
}
public String readMenuById(){
MenuService menuService = new MenuService();
setJson(new Gson().toJson(menuService.getSpecificalMenuNameById(menu.getId())));
return SUCCESS;
}
public String addMenu(){
MenuService menuService = new MenuService();
System.out.println(data);
for(int i=0; i<data.size(); i++){
System.out.println(data.get(i));
}
menu.setName("Postitus");
menuService.addMenu(menu);
return SUCCESS;
}
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
@Override
public Menu getModel() {
return menu;
}
public List<Menu> getData() {
System.out.println("Getter Call");
return data;
}
public void setData(List<Menu> data) {
System.out.println("Setter Call Flow");
this.data = data;
}
}
그리고 Menu.java
자체 : 내 클라이언트 측 코드를 실행
package com.coreRestaurant.menu;
import java.io.Serializable;
public class Menu implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
모든 시간, 난 단지 이클립스 콘솔에서 다음과 같은 입력을 볼 수
[]
Getter Call
왜 비어? JSON 배열을 클라이언트 측에서 가져 왔지만 성공하지는 못했습니다.
modeldriven 사용을 중지하십시오. 스택에'JSONInterceptor'를 포함시켜야합니다. –
Gson에서 배열을 가져 오시겠습니까? –
"데이터"변수에 클라이언트 쪽에서 오는 정보가 포함되기를 원합니다. 나중에 다른 용도로 gson을 사용합니다. – user4080732