1

購入プロセスをモデル化するJSF2ベースのWebアプリケーションがあります。このアプリケーションでは、ユーザーがウィザードのようなマナーでさまざまな情報を入力および選択し、前後に移動して、ある時点でプロセスを終了できます。

つまり、特別なことは何もありません。アプリケーションとユーザーの間の典型的な会話です。そのために、通常の会話スコープとMyFaces会話スコープの両方を試しましたが、会話の開始と終了の方法は知っています。私はまだアクティブな会話を確保することができません。言い換えると、ユーザーがページのURLを入力し、ステップ1にリダイレクトする代わりに、途中でプロセスに入るのを防ぐにはどうすればよいですか?

4

1 に答える 1

0

あなたはそれを避けることはできません。エンドユーザーは、リクエストURLを自由に操作できます。最善の策は、ウィザードのステップがビューの状態に基づいて条件付きで(ajax-)レンダリングされる単一のビュー/URLに固執することです。このように、エンドユーザーはUIで提供されるボタンによってのみナビゲートでき、URLを操作することによってはナビゲートできません。

例えば

<h:panelGroup rendered="#{wizard.step == 1}">
   <ui:include src="/WEB-INF/wizard/step1.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 2}">
   <ui:include src="/WEB-INF/wizard/step2.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{wizard.step == 3}">
   <ui:include src="/WEB-INF/wizard/step3.xhtml" />
</h:panelGroup>

また、この方法では、@ViewScopedBeanを1つではなく@ConversationScoped1つで回避できます(MyFaces CODIを使用すると、重要な場合@ViewScopedに、CDI@NamedでJSFを使用できます)。

さらに、PrimeFaces<p:wizard>には、ほぼ同じように機能するコンポーネントがあります。検証などに関する面倒な定型コードから身を守るために役立つ場合があります。

于 2013-01-10T14:13:00.500 に答える