【问题标题】:sj:select in struts 2 can't parse JSONsj:struts 2 中的选择无法解析 JSON
【发布时间】:2012-07-10 06:43:23
【问题描述】:

我正在用 struts + spring + hibernate 构建一个页面。我有一个 jQuery 选择小部件,它应该从数据库中加载一个值列表,但它没有填充。 这是此线程的延续:<sj:select> not calling action,因为我正在慢慢缩小导致此问题的原因。

这是我的代码:

struts.xml

<action name="getListOfCities" class="cityActions">
    <result type="json" name="SUCCESS">
        <param name="root">cities</param>
    </result>
</action>  

page.jsp

(用于地图)

<s:url id="cityList" action="getListOfCities"/>
  <sj:select name="select" href="%{cityList}" list="cities" headerKey="-1" emptyOption="true" headerValue="Pick one"/>

CityAction.java

public class CityActions extends ActionSupport implements ModelDriven<CityVO> {

public void setCityService(CityService cityService) {
    this.cityService = cityService;
}

public CityVO getModel(){
    System.out.println("Executing getModel()");
    return city;
}

public String execute() {
    System.out.println("Executing cities");
    return "SUCCESS";
}   

public String getJSON(){
    return execute();
}
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()));
    }
    System.out.println("Cities: " + cities);

    return cities;
}   

public List<CityVO> getCityList2(){
    System.out.println("Getting list of cityVOs");
    cityList2 = cityService.listCities();
    return cityList2;
}

}

我的操作类支持将 JSON 对象作为 VO 或作为 Map 返回。当前 page.jsp 代码用于地图功能。

我正在使用 firebug 来尝试找出问题所在。我可以看到我的 JSON 对象被正确返回。它看起来像:

{"Foo":"3","Bar":"4","Hello":"2"}

我收到了一个错误,我知道它来自 sj:select 小部件;如果我删除它,错误就会消失。

a is undefined
f()jquery....min.js (line 2)
a = undefined
c = function()
d = undefined

Google 让我相信这表明解析 JSON 值存在问题,但我找不到任何与 struts2-jquery 插件相关的示例。我尝试将 dataType="json" 添加到我的 sj:select 中,但这并不能解决问题。

如果有人有建议,将不胜感激。我已经坚持了好几天了。

【问题讨论】:

  • 你试过直接使用jQuery吗?
  • 使用标准的 s:select?有人告诉我,我应该只使用 struts2-jquery 插件,因为它留出更少的出错空间。
  • 我们检查了这个——你的选择标签试图找到一个名为“城市”的 json 值,你在你的 json 中看到这样的值吗?我没有。
  • 不,我没有。我不确定该放什么,因为我使用的语法与插件展示中的语法相同。我试图删除 但这会阻止返回正确的 json 对象。应该是什么?我觉得我不太明白。
  • 是的,您将动作定义为 ModelDriven——可能想花一些时间弄清楚 S2,然后再走得更远;从长远来看,它会为您节省一些时间。

标签: jquery json struts2 firebug


【解决方案1】:

你应该试试这个动作:

<action name="getListOfCities" class="cityActions">
    <result type="json"/>
</action>  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多