登録→確認→完了の画面遷移の憂鬱

毎回登録の仕組みを作るときに悩みます。
登録→完了の場合だと簡単に作れるのですが利用する側からすると何であれなので、登録→確認→完了の形を取ります。
この場合、よほど変わったことをしない限りビューのファイルは3つになるのですが、コントローラのファイルをいくつにするか悩みます。
大体以下の2つパターンに分けられます。

1. 1コントローラ複数画面
postするときにどの画面化を判別をするためのinputなりを持たせて、1つのアクションで全ての画面遷移を網羅するパターン。
作るファイルの数が少なくなるのが魅力的だが、コントローラの大きさがでかくなるのが欠点。
図でにするとこんな感じ。

登録   登録    完了
│    ↑↓       ↑
└─→コントローラ──┘

2. 1コントローラ1画面
1対1で対応しているので関係がわかりやすくなるが、ファイル数が多くなる。
登録→コントローラ→確認→コントローラ→完了

PHPで書いてるときは結構1のような書き方をしているが、Javaで書くときはなんとなく2のほうが好ましく感じています。

あと悩むのは、

  • 完了画面にフォワードするべきかリダイレクトするべきか
    • フォワードする場合は、F5による多重送信の可能性がある
    • リダイレクトの場合は、登録が完了していないときでも完了画面が見えてしまうのでかっこ悪い。
  • データの受け渡しはhiddenかsessionか
    • hiddenだと登録画面の遷移が多いと面倒くさい
    • sessionはデータの利用が簡単になるけど、タイムアウトする可能性もある

とこのあたりです。

どうやるのがベストプラクティスなんですかね。