私はSpring MVCを初めて使い、Post/Redirect/Getパターンを取得しようとしています。私たちは、各ページがさまざまな数の質問を表示できる調査を実装しようとしています。私がこれを実装したいのは、次の調査ページを準備してからビューに渡すGETハンドラです。同じコントローラ内で、アンケートの質問に対するフォームの回答を処理し、アンケートサービスに提出して次の質問ページを返し、次のsurveyPageをgetNextPage GETハンドラにリダイレクトする投稿ハンドラを持っています。Post-Redirect-GetでSpring MVCを使用してGETハンドラにオブジェクトを渡す方法は?
リダイレクトでPOSTハンドラからgetNextPage GETハンドラにその '次の調査ページ'オブジェクトを渡す方法がわからないという点を除いて、ほとんどが動作しています。リダイレクトは機能しています。 POSTメソッドからGETメソッドに移行しますが、surveyPage ModelAttributeはPOSTメソッドの最後に設定されたものではなく、GETメソッドの新しいオブジェクトです。ご覧のとおり、ModelAttributeを使ってみましたが、うまくいきません。私もクラスの上の@SessionAttributesを使ってみましたが、HttpSessionRequiredExceptionを取得しました。
Spring MVCフォームで変数の質問を含む動的フォームを処理する方法がわからなかったので、まっすぐにJSTLを実行しました。それはファンキーですが、うまくいきます。その不器用さは、Postと一緒に戻る@RequestBodyとSurveyPageBeanを使用した結果です。正直なところ、私はSurveyPageBeanがどのように設定されているのか分かりません。いくつかのSpring MVCの魔法のように見えますが、私は今のところそれを残しています(別の開発者がこれを行い、それを取り上げて、両方ともSpring MVCの新機能です)。それが空のsurveyPagePageAttributeがリダイレクトされない問題の一部でない限り、珍しいフォーム処理に気を取られないようにしてください。
は、ここでコントローラの抜粋です:
@Controller
@RequestMapping("/surveyPage")
public class SurveyPageController{
@RequestMapping(method=RequestMethod.GET)
public String getNextPage(@ModelAttribute("surveyPage") SurveyPage surveyPage, Model model) {
if(surveyPage.getPageId() == null) {
// call to surveyService (defined elsewhere) to start Survey and get first page
surveyPage = surveyService.startSurvey("New Survey");
}
model.addAttribute("surveyPage", surveyPage);
return "surveyPage";
}
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@RequestBody String body, SurveyPageBean submitQuestionBean, Model model, @ModelAttribute("surveyPage") SurveyPage surveyPage) {
// process form results, package them up and send to service, which
// returns the next page, if any
surveyPage = surveyService.submitPage(SurveyPageWithAnswers);
if (results.getPageId() == null) {
// The survey is done
surveyPage = surveyService.quitSurvey(surveyId);
return "redirect:done";
}
model.addAttribute("surveyPage ", surveyPage);
return "redirect:surveyPage";
}
私はこのアプローチを行うことを計画し、私はDBから一部のデータをフェッチするために私たちにそれをつもりだが、私の考えは、そのパラメータがユーザーによってそれがなって、データを変更した場合は何であるのパラメータの一つでしたフェッチするには別の方法がありますか? – newbie
セッションを使用しても構わない場合は、Flashスコープを見ることができます。 http://www.javabeat.net/flash-attributes-in-spring-mvc-3-1/ – digitaljoel