java - 使用 servlet、jquery、ajax、json 进行链式选择

标签 java jquery ajax jsp servlets

有人可以帮忙吗?我有下面的 servlet 类,每次我尝试从父类别中选择时,子类别中都不会显示任何内容。如果我做错了什么,请看看下面的内容。

谢谢

ajax部分:

    $('#parentCategorySelector').change(function () {
            var selectedValue = $(this).prop('value');
            if (selectedValue == '--Select a parent category--') {
                $('#categorySelector').empty();
            } else {
                $.post('${PREFIX}/category', selectedValue, function(data) {
                    var categorySelectorList = data.categorySelectorList;
                    $('#categorySelector').empty();
                    $.each(categorySelectorList, function(key, value) {
                        $('#categorySelector').append($('<option/>', {
                            value : value,
                            text : value
                        }));
                    });
                }, 'json');
            }
        });

servlet 类:

  public class CategoryServlet extends HttpServlet {

/**
 * serialization
 */
private static final long serialVersionUID = -2461387206258395143L;

private static final Logger LOGGER = Logger
        .getLogger(CategoryServlet.class);

private Connection connection = null;
int cat = 0;

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    connection = DBConnection.getConnection();

    RequestDispatcher dispatcher = request
            .getRequestDispatcher("pages/all.jsp");
    dispatcher.include(request, response);

    String id = request.getParameter("id");
    String category = request.getParameter("category");
    String parentCategory = request.getParameter("parentCategory");

    if (StringUtils.paramSet(id)) {

        request.setAttribute("CATEGORY", CategoryService.getCategoryById(
                Long.valueOf(id), connection));

    } else if (StringUtils.paramSet(parentCategory)) {

        request.setAttribute(
                "CATEGORY",
                CategoryService.getParentCategory(
                        Integer.valueOf(parentCategory), connection));

    } else if (StringUtils.paramSet(category)) {
        String categories = request.getParameter("category");
        if (StringUtils.paramSet(categories)) {
            request.setAttribute("CATEGORY",
                    CategoryService.listAllCategory(cat, connection));
        }
        dispatcher = request.getRequestDispatcher("jsp/pages/all.jsp");
    } else {
        request.setAttribute("CATEGORY",
                CategoryService.listAllCategory(cat, connection));

    }
    dispatcher.include(request, response);

    DBConnection.closeConnection(connection);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

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

    LOGGER.info("TESTING " + action);

    if (StringUtils.paramSet(action)) {
        connection = DBConnection.getConnection();
        Map<String, Object> resp = new HashMap<String, Object>();
        // resp.put("error", "Please fill in all fields");
         List<Category> categorySelectorList =
         CategoryService.listAllCategory(cat,connection);

         LOGGER.info("TESTING " + categorySelectorList);
        // resp.put("categorySelectorList", categorySelectorList);

        // LOGGER.info("TESTING 2 " + categorySelectorList);

        try {
            ResponseUtils.writeJson(resp, response);
        } catch (Exception e) {
            response.setContentType("application/json");
            response.getWriter()
                    .write("{\"error\" : \"An error occured please try again. If the error persists, please refresh your browser \"}");
        }
        DBConnection.closeConnection(connection);
    }
}

}

在jsp中看起来是这样的:

    <div class="control-group">
                            <label class="control-label" for="selectError">Select
                                Category</label>
                            <div class="controls">
                                <select id="parentCategorySelector" name="parentCategorySelector"
                                    data-rel="chosen">
                                    <c:forEach items="${PARENTCATEGORY}" var="parentcategory">
                                        <option value="${parentcategory.name}">
                                            <c:out value="${parentcategory.name}" />
                                        </option>
                                    </c:forEach>

                                </select>
                            </div>
                        </div> 
                        <div class="control-group">
                            <label class="control-label" for="selectError">Select
                                type</label>
                            <div class="controls">
                                <select id="categorySelector" name="categorySelector"
                                    data-rel="chosen">
                                    <c:forEach items="${CATEGORY}" var="subcategory">
                                        <option value="${subcategory.category}">
                                            <c:out value="${subcategory.category}" />
                                        </option>
                                    </c:forEach>

                                </select>
                            </div>
                        </div> 

最佳答案

尝试改变这个:

var selectedValue = $(this).prop('value');

对此:

var selectedValue = this.value;  //<---using navtive js code is better

和:

更改此:

$.post('${PREFIX}/category', selectedValue, function(data) {

对此:

$.post('${PREFIX}/category', {parentCategory:selectedValue}, function(data) {

由于您在请求参数中使用 'parentCategory',因此您必须按照建议将其传递到 $.post 函数中({ ParentCategory:selectedValue})。

关于java - 使用 servlet、jquery、ajax、json 进行链式选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043873/

相关文章:

javascript - 如何在asp.net中使用jquery方法

java - 是否有命令行工具告诉我特定类在哪个 JAR 中

java - 如何使用JDBI运行sql脚本文件

javascript - 如何在悬停时显示进度条?

javascript - 使用 jQuery 解析自定义 XML 模式

javascript - 在另一个 fancybox ajax 上打开 fancybox

java - Android 从 AsyncTask 中调用不同类的方法

java - 从重复的 ANTLR 规则中删除多余的符号

jquery - 需要有关使用 jQuery、AJAX、JSP/Servlet、MySQL 和 JSON 进行实时搜索的建议吗?

jquery ajax post 数据类型 : 'JSON' works on Android but fails on iPhone4