【发布时间】:2019-01-25 23:44:41
【问题描述】:
我正在使用 Spring。我有一个控制器,它为用户创建一个页面,然后用户输入数据。我需要捕获该数据并放入数据库 我的控制器
@Controller
@RequestMapping({"/pdc"})
public class PDCController {
// generate page to send to user
@RequestMapping(value = {"/{ffaAssgnId}"}, method = RequestMethod.GET)
public String getAssignment(Model model, @PathVariable Integer ffaAssgnId) {
Integer userContactId = userService.getUserContactId();
PDCAssgn assignment = pdcService.getAssgn(ffaAssgnId, userContactId);
List<MagValidate> statuses = validateService.getValidateByType("FAS");
Map<Integer, MagValidate> mapStatuses = new HashMap<>();
for (MagValidate status : statuses) {
mapStatuses.put(status.getValidateId(), status);
}
model.addAttribute("mapStatus", mapStatuses);
model.addAttribute("assignment", assignment);
return "pdc";
}
// get response from user
@RequestMapping(value = {""}, method = RequestMethod.POST)
public @ResponseBody AjaxResponse updateAssignment(@RequestBody PDCAssgn assignment) {
System.out.println(assignment.toString());
// try {
// pdcService.updateAssgn(assignment);
// } catch (Exception ex) {
// ex.printStackTrace();
// List<String> errors = new ArrayList<>();
// errors.add("Error saving DARF.");
// return new AjaxResponse("ERROR", null, errors);
// }
return new AjaxResponse("OK", null, null);
}
}
我渲染表单的一部分
<td><input id="wholesalerIssues0.assgnIssue.promoDealers" name="wholesalerIssues[0].assgnIssue.promoDealers" class="numberLarge" type="text" value=""/></td>
<td><input id="wholesalerIssues0.assgnIssue.dealersFound" name="wholesalerIssues[0].assgnIssue.dealersFound" class="numberLarge" type="text" value=""/></td>
<td><input id="wholesalerIssues0.assgnIssue.curDraw" name="wholesalerIssues[0].assgnIssue.curDraw" class="numberLarge" type="text" value=""/></td>
<td><input id="wholesalerIssues1.assgnIssue.promoDealers" name="wholesalerIssues[1].assgnIssue.promoDealers" class="numberLarge" type="text" value=""/></td>
<td><input id="wholesalerIssues1.assgnIssue.dealersFound" name="wholesalerIssues[1].assgnIssue.dealersFound" class="numberLarge" type="text" value=""/></td>
<td><input id="wholesalerIssues1.assgnIssue.curDraw" name="wholesalerIssues[1].assgnIssue.curDraw" class="numberLarge" type="text" value=""/></td>
等价的jsp
<td><form:input path="wholesalerIssues[${whStatus.index}].assgnIssue.promoDealers" cssClass="numberLarge" placeholder="${targetTitle.promoDealers}"/></td>
<td><form:input path="wholesalerIssues[${whStatus.index}].assgnIssue.dealersFound" cssClass="numberLarge" placeholder="${targetTitle.dealersFound}"/></td>
<td><form:input path="wholesalerIssues[${whStatus.index}].assgnIssue.curDraw" cssClass="numberLarge" placeholder="${targetTitle.curDraw}"/></td>
发送数据的javascript
function doSendA(e) {
e.preventDefault();
var form = $("#frm-assignment");
var formFields = $("#frm-assignment input:not([readonly])")
var formData = {}
$.each(formFields, function(i, v){
var input = $(v);
// populate form data as key-value pairs
// with the name of input as key and its value as value
formData[input.attr("name")] = input.val();
});
console.log(formData);
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/pdc",
contentType: "application/json; charset=utf-8" ,
data: JSON.stringify(formData),
dataType: "json",
success : function(ajaxResponse) {
if (ajaxResponse.status !== "OK") {
hideLoading();
showToast("bad", ajaxResponse.errors[0]);
return;
}
hideLoading();
// location.reload();
showToast("good", "Your data was saved.");
},
error : function(res) {
hideLoading();
showToast("bad", "There was a problem saving your data.");
}
});
}
console.log(formData);
{"wholesalerIssues[0].assgnIssue.promoDealers":"123","wholesalerIssues[0].assgnIssue.dealersFound":"","wholesalerIssues[0].assgnIssue.curDraw":"","wholesalerIssues[1].assgnIssue.promoDealers":"","wholesalerIssues[1].assgnIssue.dealersFound":"","wholesalerIssues[1].assgnIssue.curDraw":""}
控制器的System.out.println(assignment.toString());
magforce.model.PDCAssgn@4f71f251[wholesalerIssues=<null>]
我尝试打印出请求中的内容,发现绑定期间没有错误,但我的结果数据对象仍然是空的。我做了很多谷歌查询,但还没有找到任何使用 Spring 的表单标签(<form:form>、<form:input> 等)加上 ajax json 和 Spring 的 @RequestBody 的东西。
【问题讨论】:
-
您是否尝试过使用 curl 或 Postman 或类似工具访问您的端点?
-
@JonckvanderKogel 不。我不确定我会怎么做。目前我认为它与组装
formData的代码有关。我目前正在开发一个构建 javascript 对象的函数。
标签: javascript java json spring spring-mvc