1

各ステップが独自のアクションに投稿される 3 ステップのフォームがあります。アクションは次のステップにリダイレクトされます。データはセッション スコープに格納されます。ユーザーが投稿リクエスト以外からフォーム ハンドラーにアクセスできないようにするフィルターがあります。

ただし、誰かがステップのアドレスを手動で入力するのを止めるものは何もありません。この問題に対処するために、セッションで currentStep 変数を設定しました。

<!--- Some data is processed here --->
<cfset session.currentStep = "stepTwo">

ステップ 2 では、structkey をチェックします。

<cfif NOT session.currentStep = "stepTwo">
<!--- redirect to #session.currentStep# --->

このアプローチは機能しますが、大きな欠点があります。ユーザーはブラウザ ウィンドウで [戻る] ボタンを押すことも、入力済みのデータを編集することもできません。

マルチステップ フォームを実装するためのベスト プラクティスは何ですか? プロセスを改善して戻るボタン機能を組み込むことはできますか?

4

2 に答える 2

2

必要に応じて、セッションアプローチを使用し続けることができます。

主な欠点を解決するために、ロジックを少し変更することができます。

最後のステップで、すべてのステップのデータがセッションにあることを確認します。そうでない場合は、ユーザーを最初の埋められていないステップにリダイレクトしますか?難しいことではありません。

于 2010-09-16T04:35:00.980 に答える
2

セッション変数を使用して現在のステップへのアクセスのみを許可するのではなく、現在または前のステップへのアクセスを許可します。一種の「どこまで行けるか」フラグ。

次に、パンくずリストのように、前のステップへのリンクを追加します。

最後に、永続ストア (db、セッション、xml、bag ofholding など) でルックアップを使用して、そのフォームに既に入力されているデータを検索します。フォーム データの空のセットを作成し、永続ストアで見つかったもので上書きしてから、フォーム スコープ自体からのもので上書きします。何かのようなもの:

populate = structNew(); // this is the data to populate your form with on load
populate.someValue = "";
structappend(populate, dataFromStorage);
structappend(populate, form); // from things submitted from the form scope, in case validation fails
<input type="text" name="someValue" value="#variables.populate.someValue">

これで、誰かが同じフォーム ステップを 2 回ヒットすると、送信したものの検証に合格しなかった値、永続データ ストアからの値、空のフォームが (優先順に) 表示されます。

于 2010-09-16T13:24:36.693 に答える