2

あるコントローラーリクエストから別のコントローラーリクエストへのリダイレクトまたは転送を行う方法を探しています。

状況は、ユーザーがデータを入力->プレビューページ->送信の3つのステージを持つコントローラーを持っているということです。プレビューリクエストマッピングには、モデル属性とそのBindingResultがあります。バインディングにエラーがある場合は、リダイレクトを使用してユーザーを新しいフォームにプッシュし直したいのですが、そうすると、SpringはModelAttributeを再評価し、BindingResultを再作成します。

いくつかのコード:

@RequestMapping(value = "\new", method = RequestMethod.GET)
@ApplicationUserCreated
public String formNew(
        @ModelAttribute("formBean") FormBean formBean,
        BindingResult bindingResults,
        Model uiModel) {
    // Do some stuff

    // Send the "new form" view
    return "new.jsp";
}

@RequestMapping("/preview", method = RequestMethod.POST)
@ApplicationUserCreated
public String formPreview(
        @ModelAttribute("formBean") FormBean formBean,
        BindingResult bindingResults,
        Model uiModel) {
    // TODO: Validate the form
    if(bindingResults.hasErrors()) {
        // Redirect them back to the "New" form
        return "redirect:" + "/new";
    } else {
        return "preview.jsp";
    }
}

コードを単純化する必要があったので、タイプミスは許してください。formNew()メソッドからBindingResultsを削除しようとしましたが、PreviewがNewにリダイレクトすると、BindingResultsが上書きされるようです。代わりに「転送」も試してみましたが、同じ結果になりました。

4

3 に答える 3

1

ユーザーをnew.jspに戻す必要があるときに、formPreview ()からformNew( )を呼び出すだけで終わりました。リダイレクトが取得されないため、ブラウザのURLは「/ Preview」と表示されますが、少なくとも機能しており、コードの複製に時間を浪費していないように感じます。

于 2013-02-07T17:58:12.167 に答える
0

BindingResultをSessionに保存するか、少なくともSpring 3.1がある場合は、SpringFlash属性を使用してそのデータを送信してみることができます。

** ManagementMovesFormBeanがFormBeanを拡張または実装する場合は、そのBeanをフラッシュ属性で送信する必要があります。

**ちなみに、フォームを検証するには、@ ModelAttribute("....の前に@Validを追加する必要があります。

BindingResultが単一のクラスに割り当てられることを忘れないでください。たとえば、予期されるオブジェクトが異なる2つのメソッドがあるため、これら2つのBindingObjectは異なります。

于 2013-01-17T15:58:32.000 に答える
0

プレビューページの目的がわかりませんが、同じページで検証を実行し、入力が有効な場合にのみ、リダイレクトを使用してプレビューに進むことをお勧めします。

于 2017-01-03T21:21:09.580 に答える