#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.getCategoryName());
случая, когда я думаю, что параметрcategoryNm.getCategoryName()
равен нулю. Там я хочу передать выбранное значение 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());
}