我正在使用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 ......这有关系吗?
答案 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>