原來的代碼如下:
@RequestMapping("/content/update.do")
public String update(Integer id, String title, String content,
@RequestParam MultipartFile image,
HttpServletRequest request,
HttpServletResponse response,
ModelMap model) throws Exception {
myContentMng.deleteImageOnServer(id);
CmsSite site = CmsUtils.getSite(request);
String contextPath = request.getContextPath();
String originalFileName = image.getOriginalFilename();
String extension = FilenameUtils.getExtension(originalFileName).toLowerCase(Locale.ENGLISH);
String fileUrl = fileRepository.storeByExt(site.getUploadPath(), extension, image);
cmsUserMng.updateUploadSize(CmsUtils.getUserId(request), Integer.parseInt(String.valueOf(image.getSize() / 1024)));
fileUrl = contextPath + fileUrl;
MyContent myContent = myContentMng.getById(id);
myContent.setTitle(title);
myContent.setContent(content);
myContent.setImgPath(fileUrl);
myContentMng.update(myContent);
model.addAttribute("myContents", myContentMng.listAll());
return "content/get_all_my_content";
}
該方法執行的是一個內容更新的操作,返回content/get_all_my_content.html頁面,刷新一下,會進行重複的內容更新操作,從而變成了bug。在方法體內完成內容更新操作後, 進行重定向即可。這樣,再刷新頁面就不會發生重複更新內容的操作。
@RequestMapping("/content/update.do")
public void update(Integer id, String title, String content,
@RequestParam MultipartFile image,
HttpServletRequest request,
HttpServletResponse response,
ModelMap model) throws Exception {
myContentMng.deleteImageOnServer(id);
CmsSite site = CmsUtils.getSite(request);
String contextPath = request.getContextPath();
String originalFileName = image.getOriginalFilename();
String extension = FilenameUtils.getExtension(originalFileName).toLowerCase(Locale.ENGLISH);
String fileUrl = fileRepository.storeByExt(site.getUploadPath(), extension, image);
cmsUserMng.updateUploadSize(CmsUtils.getUserId(request), Integer.parseInt(String.valueOf(image.getSize() / 1024)));
fileUrl = contextPath + fileUrl;
MyContent myContent = myContentMng.getById(id);
myContent.setTitle(title);
myContent.setContent(content);
myContent.setImgPath(fileUrl);
System.out.println(myContent);
myContentMng.update(myContent);
model.addAttribute("myContents", myContentMng.listAll());
response.sendRedirect("listAll.do");
}
(注: 方法存在bug, 不可照搬照用, 這裏只用來藉以說明問題)