正常情况下 Action都会将action里面的成员变量 转成 JSON格式  传到前台  如下:
2011-08-01 16:25:30  [ http-9080-1:45719 ] - [ DEBUG ]  Executing action method = ShowActivityList
********OK***********
2011-08-01 16:25:30  [ http-9080-1:45734 ] - [ DEBUG ]  [JSON]{"activityId":null,"endDate":null,"jsonTrees":[],"eActivityList":[{"activityId":0,"endDate":"2011-08-01","etingName":"活动名称---19","startDate":"2011-08-01"}],"etingName":null,"startDate":null,"totalCount":"20"}2011-08-01 16:25:30  [ http-9080-1:45734 ] - [ DEBUG ]  after Locale=en_GB可是我这个Action 怎么不把 数据自动转成 JSON 啊  后台打印是:
2011-08-01 16:29:55  [ http-9080-2:7266 ] - [ DEBUG ]  Executing action method = showList
****wwwwwwwwwwwwwww*****5
****wwwwwwwwwwwwwww*****
2011-08-01 16:29:55  [ http-9080-2:7313 ] - [ DEBUG ]  Cyclic reference detected on SingleTableEntityPersister(com.cdcgs.paas.services.pricing.domain.ProdRule)代码如下
private List<ProdProm> prodPromsList=new ArrayList<ProdProm>();
public List<ProdProm> getProdPromsList() {
return prodPromsList;
} public void setProdPromsList(List<ProdProm> prodPromsList) {
this.prodPromsList = prodPromsList;
}
public String showList()
{
for (int i = 0; i < 5; i++) {
ProdProm prodProm=new ProdProm();
prodProm.setPromId(i);
prodProm.setPromName("测试"+i);
prodProm.setPromDesc("测试Desc"+i);
prodProm.setPromStatus(0);
prodPromsList.add(prodProm);
}
System.out.println("****wwwwwwwwwwwwwww*****"+prodPromsList.size());
System.out.println("****wwwwwwwwwwwwwww*****");
return SUCCESS;
}
action.xml如下:
<package name="web" extends="json-default" namespace="/web"> <action name="prodPromLoad" method="showList" class="prodPromAction">
<result name="success" type="json"></result>
        </action>
   </package>
我查了下  说什么  循环引用。我就把 各个类间的关系都去掉了  可还是这样子! 有没有那位大虾  能帮我下,谢谢!!

解决方案 »

  1.   

    JSON是你自己转的,action怎么可能给你去转啊 public String toJson(Object obj) {
    return JSONObject.fromObject(obj).toString();
    }

    public String toJsonArray(Object array) {
    return JSONArray.fromObject(array).toString();
    }需要json包
      

  2.   

    Action通常会吧成员变量的值放在值栈(value stack)中,,,不会自动将值转换为json格式,需要自己下载相应的Jar包进行转换。
      

  3.   

    我有下载 JAR包的。前面的
    2011-08-01 16:25:30 [ http-9080-1:45734 ] - [ DEBUG ] [JSON]{"activityId":null,"endDate":null,"jsonTrees":[],"eActivityList":[{"activityId":0,"endDate":"2011-08-01","etingName":"活动名称---19","startDate":"2011-08-01"}],"etingName":null,"startDate":null,"totalCount":"20"}2011-08-01 16:25:30 [ http-9080-1:45734 ] - [ DEBUG ] after Locale=en_GB
    都是自动转的  都在一个项目里面的。
    private List<MarkeActivity> eActivityList = new ArrayList<MarkeActivity>();
    public String ShowActivityList()
    {

    eList();
    try{

    if(eActivityList!=null&&eActivityList.size()>0)
    {
    //JSONArray jsonArray=JSONArray.fromObject(eActivityList);
    //this.jsonString = "{totalCount:"+eActivityList.size()+",results:"+jsonArray.toString()+"}";
    this.totalCount=eActivityList.size()+"";
    System.out.println("********OK***********");
    }
    }catch (Exception e) {
    System.out.println(e.getMessage()); }
    return SUCCESS;
    }
    //模拟数据
    private void eList()
    {
    List<MarkeActivity> eList = new ArrayList<MarkeActivity>();
    for (int i = 0; i < 20; i++) {
    MarkeActivity eActivity=new MarkeActivity();
    eActivity.setActivityId(i);
    eActivity.setMarketingName("活动名称---"+i);
    eActivity.setStartDate(randomString());
    eActivity.setEndDate(randomString());
    eList.add(eActivity);
    }
    eActivityList=eList;
    }谢谢,大家的热心!
      

  4.   

    是可以自动转换的 不过好下载jar 包,而且,struts的包名要继承 json的包
    如:<package name="area" extends="json-default" namespace="/area">
    还有 需要转换的成员变量要 生成 get方法