Json数组无法在jsp

时间:2018-07-06 12:23:29

标签: java json jsp

我正在jsp中进行动态搜索。 它以映射为filter.json的Filter.java开头。使用两种不同的方法,我正确地将2的ArrayList保存在SQL上的搜索结果。 这是Filter.java

class Filter() {
    ...
    ArrayList<News> newsListCat = new ArrayList<>();
    ArrayList<News> newsListAut = new ArrayList<>();
    NewsFactory newsFactory = NewsFactory.getInstance();
    String str = request.getParameter("q");

    if (str.equals("search")) {

        String toSearch = request.getParameter("toSearch");

        if (toSearch == null) {
            newsListCat = newsFactory.getNews();
        } else {
            newsListCat = newsFactory.searchNewsbyCat(toSearch);
            newsListAut = newsFactory.searchNewsbyAut(toSearch);
            //System.out.println(newsListAut);

        }
    }

    request.setAttribute("newsListCat", newsListCat);
    request.setAttribute("newsListAut", newsListAut);

    response.setContentType("application/json");
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");

    request.getRequestDispatcher("data.jsp").forward(request, response);
    ...
}

它在管理json数组的data.jsp中发送请求

<json:array>
<c:forEach var="news" items="${newsListAut}">
    <json:object>
        <json:property name="type" value="author"/>
        <json:property name="newsID" value="${news.getID()}"/>
        <json:property name="authorID" value="${news.getAuthor().getID()}"/>
        <json:property name="name" value="${news.getAuthor().getName()}"/>
        <json:property name="surname" value="${news.getAuthor().getSurname()}"/>
    </json:object>
</c:forEach>
<c:forEach var="news" items="${newsListCat}">
    <json:object>
        <json:property name="type" value="category"/>
        <json:property name="authorID" value="${news.getAuthor().getID()}"/>
        <json:property name="name" value="${news.getAuthor().getName()}"/>
        <json:property name="surname" value="${news.getAuthor().getSurname()}"/>
    </json:object>
</c:forEach>

最后,search.js应该运行请求,以查询结果动态创建无序列表。 请求的响应是正确的,但是jsp页面没有执行任何操作。

search.js

    function stateSuccess(data) {

        var ResultCat = $("newsListCat");
        $(ResultCat).empty();

        var ResultAut = $("newsListAut");
        $(ResultAut).empty();

        for (var instance in data) {
            if (data[instance].type === "category") {
                $(ResultCat).append("<li><a href='notizie.html?cat=" + data[instance].category + "'>" + data[instance].category + "</a></li>");
            } else if (data[instance].type === "author")
                $(ResultAut).append("<a href='profilo.html?id=" + data[instance].authorID + "}'><li>" + data[instance].name + " " + data[instance].surname + "</li></a>");
        }
    }

    function stateFailure(data, state) {
        console.log(state);
    }

    $(document).ready(function () {
        $("#search").keyup(function (event) {
            //$("input").css("background-color", "rgba(255, 0, 0, 0.8)");
            $.ajax({
                url: "filter.json",
                data: {
                    q: "search",
                    toSearch: event.target.value
                },
                dataType: 'json',

                success: function (data, state) {
                    stateSuccess(data);
                },
                error: function (data, state) {
                    stateFailure(data, state);
                }
            });

        });
    });

我做错什么了吗?我认为是这样,但不知道是什么。 This is how the search request result

1 个答案:

答案 0 :(得分:0)

当您单击“搜索”时,jsp页面已加载并且为空。

当您单击搜索时,ajax调用会为您获取数据,但是jsp页面未加载并且仍然为空。

使用stateSuccess函数将数据放入jsp页面。