Struts 2 jquery автозаполнение с JSON - PullRequest
0 голосов
/ 01 июля 2011

Я использую 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 ... это имеет значение?

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Использование карты в порядке с компонентами, поддерживаемыми коллекцией. Я думаю, что есть несколько проблем с вашим кодом.

Сначала в конфигурации действий вы установили корневой объект на 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>

Посмотрите, работает ли это.

0 голосов
/ 11 июля 2011

Я думаю, что ваш код в порядке, просто удалите этот код

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