在Spring中,我通常会使用redirect-after-submit(get方法mapping
)来阻止用户提交表单,
但是当我按下F5
时,它将再次获取方法mapping
并向我显示此类确认消息。我怎样才能在F5
上每次都阻止此消息。
以下是控制器的代码 -
ScheduleDetail objScheduleDetail = new ScheduleDetail();
HttpSession session = request.getSession(true);
String condition = "";
try{
int careProfessionalIDF = (Integer) session.getAttribute("careProfessionalIDF");
condition = "CareProfessionalIDF = "+careProfessionalIDF;
objScheduleDetail.setCareProfessionalIDF(careProfessionalIDF);
}catch (Exception e) {
int careProviderIDF = (Integer) session.getAttribute("careProviderIDF");
condition = "CareProviderIDF = "+careProviderIDF;
objScheduleDetail.setCareProviderIDF(careProviderIDF);
}
List<ScheduleDetail> ScheduleDetailList = objScheduleDetailManager.getAllScheduleDetail(condition+" ORDER BY ScheduleDetailIDP DESC");
model.addObject("List_of_ScheduleDetail",ScheduleDetailList);
model.addAttribute("ScheduleDetail", objScheduleDetail);
return "hospital/scheduleDetail";//jsp page
已修改的代码
@RequestMapping("/editAddressType.html")
public String editAddressType(ModelMap model,HttpServletRequest request)
{
int addressTypeIDP = Integer.parseInt(request.getParameter("AddressTypeIDP"));
AddressType objAddressType = new AddressType();
objAddressType = objAddressTypeManager.getByID(addressTypeIDP);
model.addAttribute("AddressType", objAddressType);
return "jsp/addressType";
it open addressType.jsp with data tht we bind with `model.addAttribute`. now if i press F5 it show alert message as above image.
**get method**
@RequestMapping(value="/getAddressType.html", method=RequestMethod.GET)
public String getAddressType(ModelMap model, HttpServletRequest request) throws RemoteException
{
AddressType objAddressType = new AddressType();
model.addAttribute("AddressType", objAddressType);
return "hospital/addressType";
}
答案 0 :(得分:2)
如果您正确实施POST - REDIRECT - GET模式,您将看不到您提到的浏览器的警告。当正在查看的页面响应POST请求时,会显示警告。传统模式,FORM - POST - SUCCESS页面。
您在问题中提供的代码不足以解决问题的根本原因。我在这里列出了实施的关键点,请与您的代码进行比较,您就会明白错误是什么。
向用户显示表单,他们应该在哪里输入要提交的数据。 (只是起点,可以是您申请中的任何页面。)
@RequestMapping(value = "/checkout/{cartId}.htm", method = RequestMethod.GET)
public ModelAndView showCheckoutForm(...) {
......
return new ModelAndView("/WEB-INF/jsp/form.jsp")
}
表单POST发送给处理程序方法,该方法向用户发出重定向,指向一个URL,该URL将显示由于POST而创建的资源的详细信息。
@RequestMapping(value = "/checkout/{cartId}.htm", method = RequestMethod.POST)
public View submitCheckoutForm(....) {
return new RedirectView("/checkout/confirmation/" + cartId + ".htm");
}
创建的资源的详细信息将通过如下的处理程序方法显示。请注意,此时,如果您的实现正常工作,用户浏览器中的URL将更改为POST处理程序重定向的路径。并且将向服务器发出新的GET请求。
@RequestMapping(value = "/checkout/confirmation/{cartId}.htm", method = RequestMethod.GET)
public ModelAndView showCheckoutConfirmation(....) {
return new ModelAndView("viewThatShowsCheckoutConfirmation");
}
如果您的实现类似,则确认页面是GET请求的结果,因此如果您刷新页面,浏览器不会发出重新发布数据的警告。
我怀疑你的POST处理程序没有向用户发出重定向,而是自己呈现确认页面。
希望这会有所帮助。如果这不能解决您的问题,请告诉我。