2017-03-02 11 views
0

アプリケーション内のページ間でJSFナビゲーションについて読んできましたが、まだ少し混乱しています。私は、一連のページを持つ小さなWebアプリケーションを持っています。各ページには、続行ボタンと前のボタンがあります。ビューに入力された有効なデータを保存するには、ユーザーが前後に移動したときに有効なフォームデータスティックを作成する方法を見つけようとしています。最初は、セッションの範囲でページビューを持っていましたが、その悪い習慣を理解しました。私がキャプチャしているデータは、ページ内に取り込まれたデータに対応するBean内の複合オブジェクトを持つマネージドBeanです。しかし、私はそのマネージドBeanをセッションで読むのは良い考えでもありません。非常に多くの記事を読んだ後、私は解決策を知っておくべきだと思っていますが、検証済みのデータをJSFに保存してユーザーが前後にナビゲートするときに表示する方法についてはまだ明確ではありません。あなたの助けに感謝。ページ間にデータを保存する

+0

'deltaspike' viewaccessscopeを見てください。 – Kukeltje

+0

@ Kukeltje、現時点では新しいフレームワークを検討するのは難しいですが、利用できるオプションがあることを嬉しく思っています。提案していただきありがとうございます。 – Vijaya

答えて

0

データをデータベースに保存していませんか?その場合、要求スコープのマネージドBeanを使用することができます。元のページに戻ると、更新されたレコードがデータベースから再取得され、変更が表示されます。

+0

私たちは、ユーザがタイムラインの観点から最終フォームページを提出するまで、このデータをデータベースに保存できないという制約があります。 – Vijaya

1

ウィザードのようなナビゲーションを実現しようとしているようです。このユースケースについては、私は@ConversationScopedバックエンドBeanの使用を提案します。

このスコープはJSFでは提供されていませんが、完全に連携するCDIフレームワークによって提供されています。

これはあなたが、本質的にこれらの手順を実行する必要があり動作させるために:

  1. のようなCDI Beanを作成:

    @Named 
    @ConversationScoped  
    public class MyBean implements Serializable {  
        @Inject  
        private Conversation conversation;  
        ... 
    } 
    

    @NamedはJSFs @ManagedBeanにCDIの代替手段です。
    クラスは、その状態をパッシベーションできるようにSerializableインターフェイスを実装する必要があります。
    CDI @Injectコードで使用する会話オブジェクト。経由

  2. スタートどこでもあなたのコード内の会話:、プロセス入力データを変更、移動、DBへの固執、...

  3. は、(会話を終了:

    conversation.start(); 
    
  4. は、あなたの魔法を行います)多分「Finish'-ボタンをクリックした後、最後のページで、あなたのケースで

    conversation.end(); 
    

クイックgoogle検索では、このチュートリアルが役立つアンケートサイトを実装しました。 thisをご覧ください。

これが役に立ちます。楽しむ!

+0

私が上で参照した 'viewaccessscope'について読んでください。これは、多くの場合、より簡単な方法で会話コーピングされたBeanの代わりに使用できます。より複雑な状況では、会話コーディングは確かに多分良いかもしれません。 – Kukeltje

+0

@kukeltje:OPのコードの正確な構造を知らなくても、あなたは正しいかもしれません。私は '@ ConversationScoped'を提案しました。なぜなら、DeltaSpikeが追加の依存関係になるのと同時に、JEEサーバーですぐに利用できるからです。乾杯! – SimonSez

+0

@ジャスパー:この提案に感謝します。これは間違いなく、私が見ているウィザードのスタイルの流れのために働くでしょう。 – Vijaya

関連する問題