我正在使用 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
,这是一个 Object
。但是使用上面显示的标签与 list=Object.List3
它不起作用。
它不起作用,因为首先使用列表属性中的值
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 字符串,并且不是列表。