我目前将可能使用简单列表的自动完成器更改为 json 之一,以便能够链接它们。
我从我的操作中定义了一个 json 输出(从我的 struts.xml 中提取):
<action name="listCompanies" class="web.action.SearchAction" method="getCompaniesAction">
<result type="json">
<param name="root">companies</param>
</result>
</action>
链接到代码(SearchAction 的摘录):
public String getCompaniesAction() throws Exception{
if (term!=null && term.trim().length()>1) {
companies=new ArrayList<KeyValuePair>();
IServiceReferential serviceReferential = (IServiceReferential)getService(IServiceReferential.class);
List<ICompany> listDaoCompanies =
serviceReferential.getCompanies(getUserLoginSession(),term);
for (Iterator<ICompany> it = listDaoCompanies.iterator(); it.hasNext();){
ICompany company = (ICompany) it.next();
companies.add(new KeyValuePair(company.getId().toString(), company.getCompanyname()));
}
}
return SUCCESS;
}
听起来效果很好:当我询问 json 操作时,它会起作用并返回: [{"key":"1","value":"Comp1"},{"key":"2","value":"比较"}]
jsp 中的自动完成标记如下所示:
<s:url id="url_companies" action="listCompanies" />
<sj:autocompleter size="1" name="selectCompany" href="%{url_companies}" list="companies" listKey="key" listValue="value" delay="100" loadMinimumCount="2" onSelectTopics="/autoCompanyChange"/>
它很好地触发了 json 动作,但文本框从不建议我完成。
谢谢你的帮助。