我觉得这很容易解决,但我很难过。我一整天都在搜索,但我的代码似乎与工作示例相匹配。 我正在使用Struts + SpringMVC + Hibernate,我正在用jQuery标签替换所有的dojo标签。 jQuery下拉列表没有调用相关的操作。
以下是相关代码:
struts.xml中
<action name="getListOfCities" class="cityActions">
<result type="json">
<param name="root">cities</param>
</result>
</action>
Page.jsp
<s:url id="cityList" action="getListOfCities"/>
<sj:autocompleter name="cities" href="%{cityList}" list="cities" selectBox="true"/>
CityAction.java
public class CityActions implements ModelDriven<CityVO> {
CityService cityService;
private Map<String, String> cities = new HashMap<String, String>();
CityVO city = new CityVO();
public void setCityService(CityService cityService) {
this.cityService = cityService;
}
public CityVO getModel(){
return city;
}
public String execute() {
return Action.SUCCESS;
}
public String addCity(){
try{
cityService.addCity(city);
return "SUCCESS";}
catch(Exception e){
return "ERROR";
}catch(Throwable t){
return "ERROR";
}
}
public Map<String, String> getCities() {
List<CityVO> cityList = cityService.listCities();
Iterator<CityVO> iterator = cityList.iterator();
while (iterator.hasNext()) {
CityVO fac = iterator.next();
cities.put(fac.getCityName(), Integer.toString(fac.getCityId()));
}
return cities;
}
下拉菜单显示但未填充。这就是我以前工作得很好的方法:
<s:url id="cityList" action="getListOfCities" />
<sx:autocompleter href="%{cityList}" name="cities" keyValue="0" value="---- SELECT ONE-----"/>
有没有人有解决方案?我已经确定要添加
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
和内心:
<sj:head jqueryui="true"/>
感谢。
答案 0 :(得分:2)
(评论太长了。拼凑出与你的片段类似的部分版本。)
主要问题是您的结果集root
为cities
,这意味着返回的JSON没有cities
密钥,因此自动填充的list
属性不知道在哪里获取其数据。
那就是说:是这个版本中具有selectBox
功能的时髦的东西;当我删除该属性时,我在键入时看到数据,将其设置为true,我什么也得不到。
但是,我没有看到选择过滤,这意味着即使它正确地突出显示匹配的字符,也不会删除不匹配的条目;我相信他们应该是。
无关,但为什么还要费心从VO创建地图?除非我有合理的理由(例如,CityVO
太大或包含敏感信息),只需使用listKey
和listValue
属性并使用服务已经返回的内容。