struts2返回json的list中有对象,但是前台取不到这个对象中的值,解决立即结贴给分

解决方案 »

  1.   

    如何返回的,如何拼接的json格式!~把你的action,和页面贴出来!
      

  2.   

    是不是用到了 jquery 了,它是异步传输的
    换成同步的就可以取得了吧!
      

  3.   

    楼主能把你的需求说一下,为什么用json呢?
    如果只是列表展示的话,可以直接用<s:iterator value="#request.list" id="list">
    直接展示数据啊!
      

  4.   

       貌似 后台传到前台的值 是string形式的 你前台 接受到后 要转换成对象。象  decode ecode类似的 
      

  5.   

    后台返回的数据是
    {'id':1,'name':'st','grant':[{'tm_id':1,'tm_name':'zc'},{'tm_id':2,'tm_name':'ww'}]}前台获取
    var data = eval("(" + json + ")");//json为接收的后台返回的数据;
    var id1 = data.grant[0].tm_id;
    var name1 = data.grant[0].tm_name;var id2 = data.grant[1].tm_id;
    var name2 = data.grant[1].tm_name;
    楼主参考下
      

  6.   

    樓主,用firbug調一下,看看 "網絡"視圖裏面找到對應的請求,看看有沒有返回的數據,
    接下來看著辦就行了
      

  7.   

    ylovep
    说的没有问题,我记得需要Json的一个.js脚步, 把数据再转换一下就可以了
      

  8.   

    // 首先获取所有的父节点
    public void FNodesdata(List<Nodes> list) {
    for (int i = 0; i < list.size(); i++) {
    returnStr.append("{" + "id" + ":");
    returnStr.append("\"");
    returnStr.append(list.get(i).getId());
    returnStr.append("\"");
    returnStr.append(",ParentId:");
    returnStr.append("\"");
    returnStr.append(list.get(i).getParentId());
    returnStr.append("\"");
    returnStr.append(",name:");
    returnStr.append("\"");
    returnStr.append(list.get(i).getName());
    returnStr.append("\"");
    returnStr.append(",children:");
    returnStr.append(list.get(i).getChildren());
    returnStr.append("},");
    }
    }
    // 规范成JSon格式
    public String modifyStr(String returnStr) {
    return ("[" + returnStr + "]").replace(",]", "]");
    }
    Action:
    public String execute() throws Exception {
    // TODO Auto-generated method stub
    System.out.println("actionfalther");
    // 服务器端响应客户端请求的数据
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    String data = new showAllPaper().printData();
    if (data != null && data.length() > 0) {
    out.print(data);
    } else {
    out.print("数据有问题.........");
    }
    return null;
    }
    JS:
      var dd=$.ajax({url: "itemView.action",async: false}).responseText;
              var data=eval(dd); for(var i=0;i<data.length;i++)
              {
                 if(data[i].children)
                 {
                    d.add(data[i].id,data[i].ParentId,data[i].name,"javascript:getChildren('"+data[i].id+"')");
                 }
                 else{
                    d.add(data[i].id,data[i].ParentId,data[i].name,"javascript:showArticle('"+url+"')");
                 }
              }自己的拙见!希望能够对你有所帮助!
      

  9.   

     s:debug 先查看是否有值,如果有值这是你取值出问题了,如果没值则说明你返回的有问题
      

  10.   

    前台页面地址直接输入你的ACTION,看看显示的JSON串跟你要CALLBACK能不能匹配上!我猜又是多了那个success:false;
      

  11.   

    比如List<Student> students=new ArrayList<Student>();student中有一个属性Course course;course是通过hibernate外键机制从数据库得到的是student的一个属性对象,students封装成json格式传到前台,前台无法取到course对象中的相应属性信息。
      

  12.   

    STUDENT里其他属性都能取到吗?
    struts.xml里
    <action name="xxx" class="xxx.xxx">
    <result type="json">
    <param name="root">students</param>
       </result>
    </action>试试