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

最初に list 属性の値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>JSON文字列に対応し、List<Object>リストではないためです。

于 2013-09-16T09:29:58.217 に答える