Struts 2 jquery自动完成器与JSON

时间:2011-07-01 05:30:01

标签: json jquery-plugins struts2 autocomplete

我正在使用json的形式使用atocompleter。

这是我的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";
}

使用struts.xml中的上述代码,我的jsp呈现如下。{"3":"c","2":"b","1":"a"}

但是当我删除“contentType”参数时,换句话说,内容类型是“application / json”,jsp会弹出下载窗口。 当我点击提交按钮时,我需要自动完成器返回密钥。但该页面不会加载自动完成程序。有解决方案吗 附:我在我的动作类中使用的itemList是一个HashMap ......这有关系吗?

2 个答案:

答案 0 :(得分:1)

使用map可以使用支持集合的组件。我认为您的代码存在一些问题。

首先在您的操作配置中,您已将根对象设置为itemList,这样只有列表的内容才会转换为json,因此您无法在自动填充程序中引用列表本身。

其次,您必须为自动填充程序设置href属性,并将remoteUrl设置为其值。所以你的代码可能就像:

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

看看是否有效。

答案 1 :(得分:0)

我认为您的代码没问题,只需删除此代码

即可
<param name="contentType">text/html</param>