2014-12-03 52 views
1

我想从使用getJSON jQuery方法的java服务器获取响应文本。虽然,当java类是简单格式(StringListMap)时,我可以获得响应数据,但在使用其他java对象时无法获取成功数据。在Struts 2中从Java中获取JSON对象

下面的Java类是简单类型并获得成功的访问数据和工作

package com.awitd.framework.action; 

import com.opensymphony.xwork2.Action; 

public class getAllJson implements Action{ 

private String data; 

public String getData() { 
    return data; 
} 

public void setData(String data) { 
    this.data = data; 
} 

public String execute() { 
    System.out.println(" this is from action"); 
    data = "["; 
      data += "{"; 
      data += "\"objid\":\"" + "1" + "\","; 
      data += "\"id\":\"" + "1" + "\",\"name\":\"" + "name" + "\""; 
      data += "}"; System.out.println("data " + data); 

    data += "]"; 

    return SUCCESS; 
} 


} 

下面的Java类使用其他java对象,并且不返回成功信息数据

package com.awitd.framework.action; 

import java.util.List; 

import com.opensymphony.xwork2.Action; 
import com.awitd.framework.entity.Employee; 
import com.awitd.framework.entity.Profile; 
import com.awitd.framework.service.EmployeeService; 
public class getAllJson implements Action{ 

private String data; 

private EmployeeService employeeService; 



private List<Employee> employeeList; 
private Employee employee; 
private Profile profile; 
public String getData() { 
    return data; 
} 

public void setData(String data) { 
    this.data = data; 
} 

public EmployeeService getEmployeeService() { 
    return employeeService; 
} 

public void setEmployeeService(EmployeeService employeeService) { 
    this.employeeService = employeeService; 
} 

public String execute() { 
    System.out.println(" this is from action"); 
    data = "["; 
      /*data += "{"; 
      data += "\"objid\":\"" + "1" + "\","; 
      data += "\"id\":\"" + "1" + "\",\"name\":\"" + "name" + "\""; 
      data += "}"; System.out.println("data " + data);*/ 



    employeeList = employeeService.getAll();  
    System.out.println("size........"+employeeList.size()); 
    if (!employeeList.isEmpty()) { 
     for (int i=0; i<employeeList.size(); i++) { 
      employee = employeeList.get(i); 
      profile = employee.getProfile(); 
      data += "{"; 
      data += "\"objid\":\"" + employee.getEmployeeId() + "\","; 
      data += "\"id\":\"" + employee.getId() + "\",\"name\":\"" + employee.getName() + "\""; 
      data += ",\"dob\":\"" + profile.getDob() + "\",\"sex\":\"" + profile.getSex() + "\""; 
      data += ",\"email\":\"" + profile.getEmail() + "\",\"workstart\":\"" + profile.getWorkstart() + "\""; 
      data += ",\"study\":\"" + profile.getStudySub() + "\",\"jplevel\":\"" + profile.getJpLevel() + "\""; 
      data += ",\"jpgroup\":\"" + profile.getJpGroup() + "\",\"remark\":\"" + profile.getRemark() + "\""; 
      data += "}"; 
      if (!(i==employeeList.size()-1)) 
       data += ","; 
     } 
    } 
    data += "]"; 




    return SUCCESS; 
} 


} 

得到这个错误:

No existing transaction found for transaction marked with propagation 'mandatory' 

java.lang.reflect.InvocationTargetException  
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException 
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) 
org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) 
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168) 
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134) 
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102) 
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116) 
org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:196) 
org.apache.struts2.json.JSONResult.execute(JSONResult.java:170) 
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:367) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:271) 
+0

InvocationTargetException仅仅是真实错误的抽象层。请找到堆栈跟踪(由...引起)的真实错误,并在此处发布 – 2014-12-03 10:08:20

回答

1

请尝试以下代码,它应该修复错误

data += "{"; 
data += "\"objid\":\"" + employee.getEmployeeId() + "\","; 
data += "\"id\":\"" + employee.getId() + "\",\"name\":\"" + employee.getName() + "\","; 
data += ",\"dob\":\"" + profile.getDob() + "\",\"sex\":\"" + profile.getSex() + "\","; 
data += ",\"email\":\"" + profile.getEmail() + "\",\"workstart\":\"" + profile.getWorkstart() + "\","; 
data += ",\"study\":\"" + profile.getStudySub() + "\",\"jplevel\":\"" + profile.getJpLevel() + "\","; 
data += ",\"jpgroup\":\"" + profile.getJpGroup() + "\",\"remark\":\"" + profile.getRemark() + "\""; 
data += "}"; 
+0

我甚至无法使用“EmployeeService employeeService”,我尝试使用简单的查询即可!所以我认为JSON编写者不能将employeeservice转换为JSON类型的对象。 – 2014-12-04 03:10:38

+0

你不应该使用json结果来序列化'employeeService'。看看如何从进程中排除属性[here](http://stackoverflow.com/a/21350079/573032)。 – 2014-12-04 09:12:13