Struts 2 jquery 自动完成器与 JSON

发布于 2024-11-18 06:39:12 字数 1632 浏览 2 评论 0原文

我在我的表单中使用 atocompleter 和 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";
}

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

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

I'm using atocompleter in my form with json.

This is the part of my 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>

This is the 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>

This is the action class method

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

With the above code in struts.xml my jsp renders like this.{"3":"c","2":"b","1":"a"}

But when I delete the "contentType" parameter, in other words the content type is "application/json" the jsp pops the download window.
I need theauto completer to return the key when i click submit button. But the page doesn't load with the autocompleter. Any solutions?
p.s. itemList i used in my action class is a HashMap... does that matter?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挖个坑埋了你 2024-11-25 06:39:12

对于集合支持的组件,使用映射是可以的。我认为您的代码存在一些问题。

首先,在操作配置中,您已将根对象设置为 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>

看看是否有效。

Using map is OK with collection-backed components. I think there's couple of problems with your code.

First in you action configuration you have set the root object to your itemList, this way only content of the list will be converted to json so you can't refer to the list itself in your autocompleter.

Second you have to set the href attribute for your autocompleter and set the remoteUrl as it's value. So your code could be like:

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

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

See if that works.

九公里浅绿 2024-11-25 06:39:12

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

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

I think your code is ok,Just remove this code

<param name="contentType">text/html</param> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文