0

JQueryとSpring 2.5.6を使ってオートコンプリートリストを表示しようとしているのですが、フロントエンドにjsonを入れているのですが表示できません。

 $(function() {
    $("#globalSearch").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "${pageContext.request.contextPath}/autoSearch.htm",
                data: {
                    term : request.term
                },
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function(data) {
                    // this is the alert output its displaying:{"list":["ernst","ernst&nbsp"]} 
                    alert(JSON.stringify(data, null, 4));
                    response($.map(data, function(item) {
                        //its not alerting anything here
                        alert(JSON.stringify(item, null, 4));
                        return{
                            value: item.list
                        };
                    }));
                }
            });
        }
    });
});

ここに私の春のコントローラーコードがあります:

@RequestMapping(method = RequestMethod.GET, value = "/autoSearch.htm")
public ModelAndView autoSearch(
        @RequestParam(value = "term", required = false) String term
       ) throws ParseException, IOException {

    if (logger.isDebugEnabled()) {
        logger.debug("inventoryHandler called");
    }

    Map<String, Object> model = new HashMap<String, Object>();
    int i = 0;
    model.put("list", getBaseModel().getSearchServiceBean().autoCompleter(term));
    return new ModelAndView("jsonView", model);
}

オートコンプリート リストを表示する方法を教えてください。

前もって感謝します、

よろしく、ラジャ。

4

3 に答える 3

0

@RequestMapping(method = RequestMethod.GET, value = "/autoSearch.htm") public ModelAndView autoSearch( @RequestParam(value = "term", required = false) String term ) は ParseException、IOException をスローします {

    if (logger.isDebugEnabled()) {
        logger.debug("inventoryHandler called");
    }

    Map<String, Object> model = new HashMap<String, Object>();
    model.put("list", getBaseModel().getSearchServiceBean().searchAutoComplete(term));
    return new ModelAndView("jsonView", model);
}

そしてviews.propertiesファイルでは、ビューは次のように設定する必要があります

jsonView.(クラス)=org.springframework.web.servlet.view.json.JsonView

JavaScript では、次のコードを使用してオートコンプリートが機能します。

        $("#searchEmail").autocomplete({
            source: function(request, response) {
                ajaxCall(request, response);
            },
            select: function(event, ui) {
                $("#searchEmail").val(ui.item.value);
                $("#emailSearch-form").submit();
            }
        });

        function ajaxCall(request, response) {
            $.ajax({
                url: "${pageContext.request.contextPath}/autoSearch.htm",
                data: {
                    term : request.term
                },
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function(data) {
                    response($.map(data.list, function(item) {
                        return{
                            label: item,
                            value: item
                        };
                    }));
                }
            });
        }
于 2013-01-25T10:26:32.527 に答える
0

最後に、以下に表示される解決策を見つけました。

 $(document).ready(function() {
    $("#globalSearch").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "${pageContext.request.contextPath}/autoSearch.htm",
                data: {
                    globalSearch : request.term
                },
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function(data) {
                    response($.map(data.list, function(value) {
                        return{
                            label: value,
                            value: value
                        };
                    }));
                }
            });
        }
    });
});

入力フィールドでは、名前とIDの両方が同じでなければなりません

 <input type="text" name="globalSearch" id="globalSearch"/>
于 2012-07-31T09:35:23.383 に答える
0

Spring 3.x 以降では、 @ResponseBody アノテーションを使用します。次に例を示します。

public @ResponseBody List<String> autocomplete(@RequestParam(value = "term", required = false) String term) {
    //Go get your results for the autocomplete term
    List<String> termResults = ...;

    return termResults;
}

あなたの応答が間違ったコンテンツ タイプでクライアントに送り返され、JSON ではなく text/html として解釈されているようです。応答のコンテンツ タイプを設定し、コントローラ内から JSON 文字列を書き込むことができますか?

String json = "{\"list\":[\"ernst\",\"ernst&nbsp\"]}";
response.setContentType("application/json");
PrintWriter writer = response.getWriter();
response.setContentLength(json.length());
writer.write(json);
于 2012-07-31T09:26:27.740 に答える