struts + spring + hibernate でページを作成しています。データベースから値のリストをロードすることになっているjQuery選択ウィジェットがありますが、データが入力されていません。これはこのスレッドの続きです: <sj:select> アクションを呼び出していないため、この問題の原因をゆっくりと絞り込んでいます。
これが私のコードです:
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 またはマップとして返すことをサポートしています。現在の 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
これは JSON 値の解析に問題があることを示していると Google は信じさせてくれましたが、struts2-jquery プラグインに関連する例は見つかりませんでした。sj:select に dataType="json" を追加しようとしましたが、問題は解決しません。
誰かに提案があれば、それは大歓迎です。私はこれでかなりの数日間立ち往生しています。