如何在jsp页面中获取java列表并构建下拉列表

时间:2011-06-06 10:21:30

标签: java javascript ajax jsp

我有一个jsp页面。如果用户输入某个文本,则发送ajax请求并检索List。现在,我想从List对象构建一个下拉列表,并将默认值设置为List Object的第一个元素。我怎么能这样做。

3 个答案:

答案 0 :(得分:0)

您需要在Java端对列表进行编码(可能是JSON,或使用一些自定义分隔符),然后在onSuccess回调中使用JavaScript将options添加到您的选择框中编码值。

答案 1 :(得分:0)

我没有任何AJAX知识,因此我无法帮助实现这一目标。所以我解决这个问题的方法是在java / jsp中尽我所能,然后使用javascript / AJAX从辅助jsp中获取select,如下所示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
    <c:set var="seenFirst" value="0" />
    <c:forEach var="obj" items="${sessionScope.list}">
        <c:choose>
            <c:when test="${seenFirst == 0}">
                <c:set var="seenFirst" value="1" />
                <option value="${obj}" selected>${obj}</option>         
            </c:when>

            <c:otherwise>
                <option value="${obj}">${obj}</option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</select>

修改 实际上,只需使用<c:forEach>使用辅助var来计算选项(在id字段中),然后使用javacript将所选属性打开到第一个,就可以更清晰地构建菜单。像这样:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<select>
    <c:set var="n" value="0" />
    <c:forEach var="obj" items="${sessionScope.list}">
        <option id="menu-${n}" value="${obj}">${obj}</option>
        <c:set var="n" value="${n + 1}" />
    </c:forEach>
</select>

你可以使用这样的东西来选择第一个元素:

var first = document.getElementById('menu-0');
first.selected = true;

答案 2 :(得分:0)

我建议使用servlet来处理ajax请求,使用JSON作为数据传输格式,并使用jQuery来执行真正的ajax请求以及遍历和操作HTML DOM树。您可以在How to use Servlets and Ajax?中找到很多示例。您的具体案例可以解决如下:

JSP:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 6250627</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#search').keyup(function() {
                    $.get('search', $(this).serialize(), function(responseText) {
                        var $select = $('#results');
                        $select.find('option').remove();
                        $.each(responseJson, function(key, value) {
                        $('<option>').val(key).text(value).appendTo($select);
                    });
                });
            });
        </script>
    </head>
    <body>
        <form><input id="search" /></form>
        <select id="results"></select>
    </body>
</html>

Servlet(使用Google Gson将Java对象转换为JSON字符串):

@WebServlet(urlPatterns={"/search"})
public class SearchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map<String, String> results = someService.find(request.getParameter("search"));
        String json = new Gson().toJson(results);

        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json);
    }

}