如何在 Struts 2 jQuery <sj:select> 标签中访问嵌套的 JSON 响应

问题描述 投票:0回答:1

我正在使用 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
它不起作用。

java jquery json jsp struts2
1个回答
0
投票

它不起作用,因为首先使用列表属性中的值

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

© www.soinside.com 2019 - 2024. All rights reserved.