11

私はSpring 3.1を使用しています。FORM 経由で送信されたコマンド オブジェクト (データ ホルダー) を受け取り、何らかの処理を行うコントローラー関数があります。

@RequestMapping(value = "/results", method = RequestMethod.POST)
public String toResultsScreen(@ModelAttribute("ssdh") SearchScreenDataHolder ssdh,
                                  BindingResult bindingResult,    
                                  ModelMap model,                
                                  HttpSession session) {

    if (bindingResult.hasErrors()) {
        logger.debug("Error returning to /search screen");
        return "search";
    }

    netView = "results";

    // do stuff

    return nextView;         

} // end function

一部のユーザーは、プログラムで GET リンクを作成してサイトから情報を取得したいと考えており、その要求を処理する別のハンドラーをセットアップしたいと考えています。そのコマンド オブジェクト ( ssdh ) の新しいインストールを作成し、GET 要求を介して送信されたパラメーターを入力します。次に、それを上記のハンドラーに渡します。このようなもの:

@RequestMapping(value = "/pubresult")
public String toPublicResultsScreen(ModelMap model,    
                                   HttpSession session,             
                                   @RequestParam (required=true) String LNAME,   
                                   @RequestParam (required=false)String FNAME){

    Search search = new Search(usertype);

    // Capture the search parameters sent by HTTP
    ssdh.setLast_name(LNAME);
    ssdh.setFirst_name(FNAME);

    // To Do:  "forward this data holder, ssdh to the controller function quoted first

    return nextView;         

} // end function

私の質問は、コードを最初のコントローラー関数に変更する必要がないように、コマンド/データホルダーオブジェクトを最初のコントローラー関数に転送するにはどうすればよいですか?

4

3 に答える 3

17

Spring MVC 3.1 で導入されたオブジェクトを使用RedirectAttributesして、リダイレクト用に保持したいデータを入力できます。PRG (POST/Redirect/GET) パターンと呼ばれます。

@RequestMapping(value="/saveUserDetails.action", method=RequestMethod.POST)
public String greetingsAction(@Validated User user,RedirectAttributes redirectAttributes){
    //setting attributes 
    redirectAttributes.addFlashAttribute("firstName", user.getFirstName());
    redirectAttributes.addFlashAttribute("lastName", user.getLastName())
    return "redirect:success.html";
} 

使用方法に関する技術記事を書きました。私はそれがあなたに詳細を与えると信じています:

http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31

于 2012-08-14T21:15:00.397 に答える
7

ModelAttributeでssdhを設定し、それを単純に転送できるようにする必要があります。このようにして、RequestDispatcherはそれを/resultsハンドラーにマップして戻すことができるはずです。

@RequestMapping(value = "/pubresult")
public String toPublicResultsScreen(ModelMap model,    
                                   HttpSession session,             
                                   @RequestParam (required=true) String LNAME,   
                                   @RequestParam (required=false)String FNAME, Model model){

  Search search = new Search(usertype);
  // Capture the search parameters sent by HTTP
  ssdh.setLast_name(LNAME);
  ssdh.setFirst_name(FNAME);
  model.addAttribute("ssdh", ssdh);

  return "forward:/results";         

}
于 2012-08-14T21:38:33.680 に答える