我正在使用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
”它不起作用。
答案 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字符串,而不是列表。