如何在Struts 2中访问嵌套的JSON响应jQuery sj:select tag

时间:2013-07-11 13:30:55

标签: java jquery json jsp struts2

我正在使用Struts2及其jQuery插件开发Web应用程序。我的sj:select标记看起来如下,并且在我有非嵌套JSON响应时工作得非常好:

<s:url id="remoteurl" namespace="/XYZ" action="ZXY"/>
<sj:select 
href="%{remoteurl}" 
id="abc" 
onChangeTopics="dosomething" 
name="cde" 
list="List" 
label="Customer" />

从我的控制器中,我使用AJAX调用得到类似下面的JSon响应。

{"List1":null,"Object":{"List2":null,"Var1":null,"List3":{"8":"a","9":"b","10":"c","14":"d","15":"e"}}

在我的<sj:select>我想要“List3”,它位于“对象”中。但是使用上面显示的标记“list=Object.List3”它不起作用。

1 个答案:

答案 0 :(得分:0)

它不起作用,因为首先使用list属性中的值"Object.List3"来评估OGNL表达式,然后在失败时将它用作JSON数组的名称(如果使用了地图则使用JSON数组)宾语)。但是标记sj:select使用该值作为根JSON对象,它不会导航到JSON对象的JSON数组,因为它没有使用JS中的任何对象图导航库。要使其正常工作,您需要在JSON结果中添加root参数

@Action(value="ZXY", results=@Result(type="json", params = {"root","Object"}))  

然后使用JSON批注指定name如果要保留该名称

@JSON(name = "Object.List3")
public Map<Integer,String> getList3() {
  return list3;
}

然后JSON字符串看起来像

{"List2":null,"Var1":null,"Object.List3":{"8":"a","9":"b","10":"c","14":"d","15":"e"}} 

Map<Integer,String>而不是List<Object>,因为它对应于您的JSON字符串,而不是列表。