1

これは本当に簡単な修正だと思いますが、困惑しています。私は一日中探し回っていますが、私のコードは実際の例のコードと一致しているようです。私は Struts+SpringMVC+Hibernate を使用しており、すべての dojo タグを jQuery タグに置き換えようとしています。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"/>

ありがとう。

4

1 に答える 1

2

(コメントするには長すぎます。スニペットに似たものの部分的なバージョンをまとめました。)

主な問題は、結果がに設定rootされることcitiesです。つまり、返されるJSONにはcitiesキーがないため、オートコンプリートのlist属性はデータの取得先を認識しません。

つまり、このバージョンの機能にはファンキーなものがあります。selectBoxその属性を削除すると、trueに設定して入力したときにデータが表示され、何も取得されません。

ただし、選択フィルタリングは表示されません。つまり、一致する文字が正しく強調表示されていても、一致しないエントリは削除されません。私は彼らがそうあるべきだと信じています。

無関係ですが、なぜVOからマップを作成するのが面倒なのですか?適切な理由がない限り(たとえば、CityVO大きすぎる、機密情報が含まれている)、listKeyandlistValue属性を使用し、サービスがすでに返しているものを使用します。

于 2012-07-05T15:16:15.220 に答える