提问人:jadekim 提问时间:9/7/2023 最后编辑:jadekim 更新时间:9/7/2023 访问量:27
移动ajax视图时如何维护控制器的model和bindingResult
How to maintain the model and bindingResult of the controller when moving the view of ajax
问:
我尝试了以下方法。但是,当按 location.href 移动视图时,不会保留 model 和 bindingResult。如何维护模型和bindingResult?也许方法是错误的......
控制器
@PostMapping("/example")
@ResponseBody
public Map<String, Object> example(
@RequestPart("formRequest") @Validated FormRequest formRequest,
BindingResult bindingResult,
@RequestPart(value = "file", required = false) MultipartFile file,
@RequestPart(value = "files", required = false) MultipartFile[] files,
Model model
) {
Map<String, Object> response = new HashMap<>();
if (bindingResult.hasErrors()) {
log.warn("bindingResult={}", bindingResult);
model.addAttribute("formRequest", formRequest);
model.addAttribute("formStatus", FormStatus.CREATE);
response.put("errors", bindingResult.getAllErrors());
response.put("url", "/example");
return response;
}
return response;
}
formRequest
public record FormRequest(
Long id,
@NotBlank
String content1,
@NotBlank
String content2,
@NotBlank
String content3,
@NotNull
Integer number1,
@NotNull
Integer number2,
@NotNull
List<GoodRequest> goodRequests,
@NotNull
List<DimRequest> dimRequests,
String category
) {}
阿贾克斯
$.ajax({
url: url,
type: "POST",
data: formData,
enctype: "multipart/form-data",
contentType: false,
processData: false,
success: function (response) {
location.href = response.url;
}
});
答:
0赞
esQmo_
9/7/2023
#1
当您使用 重定向页面时,将重新加载当前页面,并将任何数据存储在模型中或丢失。在请求之间维护数据的一种方法是将其存储在会话中或将其作为 URL 参数传递。location.href
BindingResult
在这种情况下,您可以修改控制器以将 and 对象存储在会话中,然后在呈现视图时从会话中检索它们。修改代码,如下所示:formRequest
bindingResult
@PostMapping("/example")
@ResponseBody
public Map<String, Object> example(
@RequestPart("formRequest") @Validated FormRequest formRequest,
BindingResult bindingResult,
@RequestPart(value = "file", required = false) MultipartFile file,
@RequestPart(value = "files", required = false) MultipartFile[] files,
Model model,
HttpSession session
) {
Map<String, Object> response = new HashMap<>();
if (bindingResult.hasErrors()) {
log.warn("bindingResult={}", bindingResult);
// Store formRequest and bindingResult in the session
session.setAttribute("formRequest", formRequest);
session.setAttribute("bindingResult", bindingResult);
response.put("errors", bindingResult.getAllErrors());
response.put("url", "/example");
return response;
}
return response;
}
然后,在您的视图中,您可以从会话中检索 和 对象并使用它们。formRequest
bindingResult
评论
location.href
BindingResult