2

我正在使用 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是行不通的。

4

1 回答 1

0

它不起作用,因为首先Object.List3列表属性中的值用于评估 OGNL 表达式,然后在失败时将其用作 JSON 数组的名称(如果使用映射则用于 JSON 对象)。

但是该标签<sj:select>将该值用作根 JSON 对象,它不会导航到 JSON 对象的 JSON 数组,因为它没有使用 JS 中的任何对象图导航库。要使其正常工作,您需要root在 JSON 结果中添加参数

@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 字符串并且它不是列表。

于 2013-09-16T09:29:58.217 回答