【问题标题】:How to access nested JSON Response in Struts 2 jQuery <sj:select> tag如何在 Struts 2 jQuery <sj:select> 标签中访问嵌套的 JSON 响应
【发布时间】:2013-07-09 19:20:38
【问题描述】:

我正在使用 Struts2 及其 jQuery 插件开发一个 Web 应用程序。我的&lt;sj:select&gt; 标记如下所示,当我收到非嵌套 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"}}

在我的&lt;sj:select&gt; 中,我想要List3,这是一个Object。但是将上面显示的标签与list=Object.List3一起使用是行不通的。

【问题讨论】:

  • 您确定这是您收到的 JSON 响应吗?你能展示一下生成它的数据结构吗?
  • 试试list="object.list3"
  • 没用。不过还是谢谢。
  • 您的 JSON 格式似乎错误。
  • 嗯,它是由框架生成的,所以我猜 - 没有深入的 JSon 专业知识 - 它是正确形成的,或者至少在框架的意图中形成得足够好。

标签: java jquery json jsp struts2


【解决方案1】:

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

但是标签&lt;sj:select&gt;将该值用作根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&lt;Integer,String&gt; 而不是 List&lt;Object&gt;,因为它对应于您的 JSON 字符串并且它不是一个列表。

【讨论】:

    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2016-07-23
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多