<sj:select> not calling action </sj:select>

时间:2012-07-04 19:43:25

标签: jquery drop-down-menu struts2

我觉得这很容易解决,但我很难过。我一整天都在搜索,但我的代码似乎与工作示例相匹配。 我正在使用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"/>

感谢。

1 个答案:

答案 0 :(得分:2)

(评论太长了。拼凑出与你的片段类似的部分版本。)

主要问题是您的结果集rootcities,这意味着返回的JSON没有cities密钥,因此自动填充的list属性不知道在哪里获取其数据。

那就是说:这个版本中具有selectBox功能的时髦的东西;当我删除该属性时,我在键入时看到数据,将其设置为true,我什么也得不到。

但是,我没有看到选择过滤,这意味着即使它正确地突出显示匹配的字符,也不会删除不匹配的条目;我相信他们应该是。

无关,但为什么还要费心从VO创建地图?除非我有合理的理由(例如,CityVO太大或包含敏感信息),只需使用listKeylistValue属性并使用服务已经返回的内容。