2011-07-01 19 views
0

私はjsonのフォームでatocompleterを使用しています。JSONを使ったStruts 2 jqueryオートコンプリート

これは、これは、JSP

 <s:form id="frm_demo" name="frm_demo" theme="simple" action="test2"> 
     <s:url id="remoteurl" action="test" />   
     <sj:autocompleter 
          id="lst" 
          name="lst" 
          list="%{remoteurl}" 
          listValue="name" 
          listKey="id" 
          selectBox="true" 
        /> 
        <s:submit value="submit"/> 
       </s:form> 

これは支柱に上記のコードを持つアクション・クラス・メソッド

public String populate() throws Exception{ 
    itemList.put("1", "a"); 
    itemList.put("2", "b"); 
    itemList.put("3", "c"); 
    return "success"; 
} 

ある

<package name="json" namespace="/" extends="json-default"> 
    <result-types> 
     <result-type name="json" class="com.googlecode.jsonplugin.JSONResult" /> 
    </result-types> 
    <action name="test" class="testClass" method="populate"> 
     <result type="json" name="success"> 
      <param name="root">itemList</param> 
      <param name="contentType">text/html</param> 
     </result> 
    </action> 
</package> 

私struts.xmlの一部であります.xml私のjspはこれをレンダリングします。 {"3":"c","2":"b","1":"a"}

しかし、私が "contentType"パラメータを削除した場合、つまりコンテンツタイプが "application/json"である場合、jspはダウンロードウィンドウをポップします。 送信ボタンをクリックすると、オートコンプリータでキーを返す必要があります。しかし、ページはオートコンプリートで読み込まれません。どんな解決策ですか? p.s.私のアクションクラスで使用されているitemListはHashMapです...それは重要ですか?

答えて

1

マップを使用するには、コレクションをサポートするコンポーネントでOKです。私はあなたのコードにいくつかの問題があると思います。

最初のアクション設定では、ルートオブジェクトをitemListに設定します。この方法では、リストの内容のみがjsonに変換されるため、オートコンプリートのリスト自体を参照することはできません。

次に、オートコンプリートにhref属性を設定し、remoteUrlをその値に設定する必要があります。あなたのautompleterで

<package name="json" namespace="/" extends="json-default"> 
    <action name="test" class="testClass" method="populate"> 
     <result type="json"/> 
    </action> 
</package> 

:だからあなたのコードは次のようにすることができることが動作するかどうか

<s:form id="frm_demo" theme="simple" action="test2"> 
<s:url id="remoteurl" action="test" />   
<sj:autocompleter href="%{remoteurl}" 
        id="lst" 
        name="lst" 
        list="itemList" 
        listValue="name" 
        listKey="id" 
        selectBox="true"/> 
    <s:submit value="submit"/> 
</s:form> 

を参照してください。

0

私はちょうどこのコードを削除

<param name="contentType">text/html</param> 
+0

、あなたのコードはOKだと思いますが、慎重に質問を読んで、彼はすでにそれをやってみました。 –

関連する問題