2011-07-01 86 views
0

我在我的表單中使用atocompleter與json。Struts 2 jQuery與JSON自動完成器

這是我的struts.xml的部分

<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> 

這是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"; 
} 

隨着支柱上面的代碼.xml我的jsp像這樣渲染。 {"3":"c","2":"b","1":"a"}

但是,當我刪除「contentType」參數,換句話說內容類型是「application/json」時,jsp彈出下載窗口。 我需要theauto完成者返回密鑰,當我點擊提交按鈕。但該頁面不會與自動完成程序一起加載。任何解決方案 p.s. itemList我用在我的行動類是一個HashMap ...那很重要嗎?

回答

1

使用映射對收集支持的組件是可以的。我認爲你的代碼有幾個問題。

首先在您的動作配置中,您已將根對象設置爲您的itemList,這種方式只會將列表內容轉換爲json,因此您無法在自動完成器中引用列表本身。

其次,您必須爲自動完成器設置href屬性,並將其設置爲remoteUrl作爲其值。所以,你的代碼可能是這樣的:

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

在你autompleter:

<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

仔細閱讀的問題,他已經嘗試過這樣做。 –