struts 2映射返回列表/集合为json

时间:2012-01-10 17:20:51

标签: json struts2

我简化了我的代码,使其易于理解:

我有一个动作类

public class MyAction extends ActionSupport {
  private BigClass item;

  public String myMethod(){
    //call some services
    this.item = processedStuff;
    return SUCCESS;
  }

}

和BigClass中有一个数组:

public class BigClass{
  private String data1;
  private String data2;
  private List<MyBean> dataArray=new ArrayList()<MyBean>;
  //setters and getters ...
}

和strut.xml映射

 <result name="success" type="json">
      <param name="includeProperties">
         item\.data1,
         item\.data2,
         item\.dataArray\[\d+\]\.id,
         item\.dataArray\[\d+\]\.name
      </param>

</result>

作为json的结果,我只获取信息data1和data2,数组没有返回.. 但是,如果我改变

item\.dataArray\[\d+\]\.id, 
item\.dataArray\[\d+\]\.name

 item\.dataArray.*,

我得到了我需要的所有信息。 表达式item\.dataArray\[\d+\]\.id是不正确的?

2 个答案:

答案 0 :(得分:1)

在struts.xml中添加额外的两行item\.dataArray, item\.dataArray\[\d+\],可以解决问题。我也在下面展示了它。

<result name="success" type="json">
   <param name="includeProperties">
     item\.data1,
     item\.data2,

     item\.dataArray,
     item\.dataArray\[\d+\],

     item\.dataArray\[\d+\]\.id,
     item\.dataArray\[\d+\]\.name
  </param>
</result>

答案 1 :(得分:0)

请参阅此answer,这被拒绝Suggestion :(
并确保您的OGNL表达在语法和逻辑上都是正确的 “item \ .dataArray \ [\ d + \] \ .id”在语法上是正确的,它将获得诸如item.dataArray [0] .id,item.dataArray [1] .id,item.dataArray [2]之类的值。 id等等。