Я динамически загружал выпадающий список с вызовом ajax
, но проблема в том, что я не могу получить к нему доступ в controller
. динамически загруженный выпадающий список найден как null
в контроллере!Динамическое падение вниз, загруженное с помощью ajax, найдено как null в контроллере mvc весны
JSP-код:
<body>
<c:url var="updateUrl" value="${actionPath}"/>
<form:form method="post" action="${updateUrl}" commandName="complaintDetail">
<table>
<tr>
<td><form:label path="complaintCategory">Category</form:label></td>
<td>
<form:select path="complaintCategory">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${categoryList}"/>
</form:select>
</td>
</tr>
<tr>
<td><form:label path="complaintReasonDetail">Reason</form:label></td>
<td>
<form:select path="complaintReasonDetail">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${reasonList}" />
</form:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="${submitString}">
</td>
</tr>
</table>
</form:form>
</body>
, ИС Код:
$('#complaintCategory').change(
function(){
var findReasonsURL = '/Vela-web-client/complaint/getReason/' + $(this).val() + '/GENERAL.htm';
//alert($(this).val());
$.getJSON(findReasonsURL, {},
function(data) {
var html = '<option value="">--- Select ---</option>';
var len = data.length;
$.each(data, function(i, obj){
html += '<option value="' + obj.idNr + '">' + obj.complaintReasonSt + '</option>';
});
$('#complaintReasonDetail').html(html);
});
});
Для этого Ajax вызова, соответствующий код контроллера:
@RequestMapping(value = "/complaint/getReason/{category}/{rType}", method = RequestMethod.GET)
public @ResponseBody
List<ComplaintReasonDetail> getReason(
@PathVariable(value = "category") String category,
@PathVariable(value = "rType") String rType)
{
List<ComplaintReasonDetail> complaintReasonDetails;
ComplaintCategory complaintCategory = ComplaintCategory.valueOf(category);
ReasonType reasonType = ReasonType.valueOf(rType);
try
{
complaintReasonDetails = ComplaintReasonHandler.getComplaintReasonAdvanceSearchResult("", false, complaintCategory, true, reasonType, true, BigInteger.ONE);
System.out.println("reason list count = " + complaintReasonDetails.size());
return complaintReasonDetails;
}
}
До этого все работает отлично!
Проблема возникает, когда я отправляю форму. Я получаю complaintReasonDetail
как null
в коде контроллера.
Controller Код:
@RequestMapping(value = "/complaint/doadd/addnew", method = RequestMethod.POST)
public String addCompliant(@RequestBody @ModelAttribute("complaintDetail") ComplaintDetail complaintDetail, BindingResult result, Model model)
{
System.out.println("category = "+complaintDetail.getComplaintCategory()); // OK
System.out.println("reason = "+complaintDetail.getComplaintReasonDetail()); // print null ???
}
Это немного длинный вопрос, но чтобы было понятно, я думаю, что это необходимо.
Итак, что мне не хватает на самом деле?
проверить браузер просмотреть исходный код html generated for complaintsReasonDetail select box? а также первое значение параметра пустое не задано в jquery. – Rembo
@Rembo: да, он сгенерирован, и я вижу его в разделе 'form-data', когда форма отправляется, и значение передается (например, 2). Но я думаю, что это значение не сопоставляется с 'complaintsReasonDetail' или как преобразовать его в этот объект. – sarwar026
- это примитивный/обертковый тип 'requestReasonDetail'? или пользовательский, если он определен пользователем, вам нужен конвертер. посмотрите [answer] (http://stackoverflow.com/a/921725/1066779) и [docs] (http://docs.spring.io/spring-framework/docs/3.2.x/spring-framework- reference/html/validation.html) – Rembo