Заполнение выпадающего списка на основе другого выпадающего списка в Spring MVC

#ajax #spring #jsp #spring-mvc #dropdown

#ajax #весна #jsp #spring-mvc #выпадающий список

Вопрос:

У меня проблема в моем веб-приложении Spring MVC. У меня есть два выпадающих списка: CategoryName и subCategoryName. Выпадающий список CategoryName был заполнен с использованием значений базы данных. Код для этого показан ниже, и он работает нормально.

Метод контроллера:

 @RequestMapping(value = "/add", method = RequestMethod.GET)
public String showAddItem(Model model) {

    List<Map<String, Object>> listCat = categoryRepository.viewCategoryList();
    model.addAttribute("listCat",listCat);
    return "addItem";
}
  

Код JSP:

 <form:select class="form-control" id="selectCat" path="categoryName">
    <form:option value="-" label="--Select Category--"/>
    <c:forEach var="list" items="${listCat}">
        <form:option id="${list.key}" value="${list.get("name")}">${list.get("name")}</form:option>
    </c:forEach>
</form:select>
  

Выпадающее subCategoryName должно быть заполнено в соответствии со значением, выбранным из раскрывающегося списка CategoryName .Для этого я подумал о вызове ajax при выборе события изменения следующим образом.

 $("#selectCat").change(function(){
    var categoryNm = $(this).val();
    $.ajax({
        type: "POST",
        url: "https://localhost:8443/admin/items/getSubcats",
        data: {"categoryNm " : categoryNm },
        success: function(data){
            var slctSubcat = $("#selectSubCat"), option= "";
            slctSubcat.empty();

            for(var sb =0; sb<data.length; sb  ){
                option = option   "<option value='"   data[sb].name   "'>"  data[sb].name   "</option>";
            }
            slctSubcat.append(option);
        },
        error:function(){
           alert("error");
        }
   });

});
  

Этот вызов ajax будет адресован следующему методу контроллера, который содержит запрос для выбора соответствующего списка подкатегорий из базы данных.

 //controller method to get relevant subcategory
@RequestMapping(value="/getSubcats",method=RequestMethod.POST)
public @ResponseBody List<Map<String, Object>> getSubcatList(@ModelAttribute("categoryNm") Category categoryNm){

    return categoryRepository.retrieveSubcatogories(categoryNm.getCategoryName());
}
  

Код JSP, в котором я хочу заполнить список подкатегорий, выглядит следующим образом

Но я не заполняю раскрывающийся список подкатегории. Может ли кто-нибудь понять меня, пожалуйста

 <form:select class="form-control" id="selectSubCat" path="subCategoryName">
    <form:option value="-" label="--Select sub-category--"/>
</form:select>
  

Комментарии:

1. Вы проверили свой ответ data ? Что он отображает? Также у вас есть slctSubcat.empty(); , который удалит даже параметр по умолчанию select . сначала попробуйте добавить этот параметр по умолчанию, если он работает нормально, затем проверьте свой respose.

2. @VPK Никаких изменений, хотя я удалил slctSubcat.empty(); , затем я проверил ответ с помощью предупреждения. Он переходит к функции успеха, но ответ пуст (предупреждение ничего не показывает)

3. Затем вы должны проверить метод контроллера getSubcatList() , возвращает ли он правильное значение или нет. Возможно, вы получаете нулевое значение из categoryRepository.retrieveSubcatogories(categoryNm.getCategoryName());

4. Вызывается ли ваш контроллер? получаете ли вы данные в ответе ajax?

5. @VPK да… мы получаем нулевое значение для categoryRepository.retrieveSubcatogories(categoryNm.getCateg‌​oryName()); случая, когда я думаю, что параметр categoryNm.getCateg‌​oryName() равен нулю. Там я хочу передать выбранное значение CategoryName (в первом выпадающем списке) из представления jsp в этот метод контроллера. Можете ли вы рассказать, как это сделать.

Ответ №1:

 @RequestMapping(value="/getSubcats",method=RequestMethod.POST)
public @ResponseBody List<Map<String, Object>> getSubcatList(@RequestParam("categoryNm") String categoryNm){

    return categoryRepository.retrieveSubcatogories(categoryNm.getCategoryName());
}