2

春には通常、ユーザーがフォームを送信するのを防ぐためにリダイレクト後の送信(メソッドの取得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";
    }
4

1 に答える 1

3

POST - REDIRECT - GET パターンを正しく実装すると、言及したブラウザーからの警告は表示されません。表示されているページが POST 要求に応答している場合、警告が表示されます。伝統的なパターン、FORM - POST - SUCCESS ページ。

質問で提供したコードは、問題の根本原因に到達するには不十分です。ここに実装の重要なポイントをリストしています。コードと比較してください。間違いが何であるかがわかります。

  1. 送信用のデータを入力するフォームをユーザーに表示するため。(開始点にすぎません。アプリケーションのどのページでもかまいません。)

    @RequestMapping(value = "/checkout/{cartId}.htm", method = RequestMethod.GET)
    public ModelAndView showCheckoutForm(...) {
         ......
         return new ModelAndView("/WEB-INF/jsp/form.jsp")
    }
    
  2. フォームはハンドラー メソッドに POST します。ハンドラー メソッドはリダイレクトをユーザーに発行し、POST の結果として作成されたリソースの詳細を示す URL を指します。

    @RequestMapping(value = "/checkout/{cartId}.htm", method = RequestMethod.POST)
    public View submitCheckoutForm(....) {
         return new RedirectView("/checkout/confirmation/" + cartId + ".htm");
    }
    
  3. 作成されたリソースの詳細は、次のようなハンドラ メソッドによって表示されます。この時点で、実装が適切に機能していれば、ユーザーのブラウザーの URL は、POST ハンドラーによってリダイレクトされたパスに変更されることに注意してください。そして、新しい GET リクエストがサーバーに発行されます。

    @RequestMapping(value = "/checkout/confirmation/{cartId}.htm", method = RequestMethod.GET)
    public ModelAndView showCheckoutConfirmation(....) {
          return new ModelAndView("viewThatShowsCheckoutConfirmation");
    }
    

実装が類似している場合、確認ページは GET 要求の結果であるため、ページを更新してもブラウザーはデータの再 POST に関する警告を発行しません。

私の疑いは、あなたの POST ハンドラーがユーザーにリダイレクトを発行しておらず、代わりに確認ページ自体をレンダリングしていることです。

お役に立てれば。これで問題が解決しない場合はお知らせください。

于 2013-08-01T13:30:28.263 に答える