2012-02-14 7 views
0

JSF 2.0を使用しています。実際には、JSF 1.2からJSF 2.0に移行しています。 私はのフォームを持っています。<ui:include>タグで3つのフォームが含まれています。<ui:include>が複数あり、1つの要求スコープBeanを持つ複数ステップのウィザードフォームで、次のステップに進む方法は?

以下のようなmainPage.xhtmlページの外観は、

<c:if test="#{myManagedBean.stepRender eq 'firstPage'}"> 
     <ui:include src="/public/firstPage.xhtml"/> 
    </c:if> 
    <c:if test="#{myManagedBean.stepRender eq 'secondPage'}"> 
     <ui:include src="/public/secondPage.xhtml"/> 
    </c:if> 
    <c:if test="#{myManagedBean.stepRender eq 'thirdPage'}"> 
     <ui:include src="/public/thirdPage.xhtml"/> 
    </c:if> 

firstPage.xhtmlは、いくつかの入力フィールドがあり、action="myManagedBean.continueStepOne"と1 <h:commandButton>

secondPage.xhtmlには、入力フィールドが数個あり、<h:commandButton>action="myManagedBean.continueStepTwo"です。

thirdPage.xhtmlには、入力フィールド数が少なく、<h:commandButton>action="myManagedBean.continueStepThree"のフィールドがあります。

すべてのインクルードページに1つのBeanのみを使用し、mainPage.xhtmlページを使用しました。 Beanはリクエストスコープです。

Beanクラス最初

public String continueStepOneAction(){ 
    == validation logic == 
    stepRender="secondPage"; 
    return "mainPage"; 

} 

public String continueStepTwoAction(){ 
    == validation logic == 
    stepRender="thirdPage"; 
    return "mainPage"; 

} 

のコードIは、mainPage.xhtmlに要求を送信し、stepRender値に応じて、それは最初firstPage.xhtmlある特定のページを含むであろうが。

データを入力してcommandbuttonをクリックすると、continueStepOneアクションが呼び出されます。検証が成功すると、stepRenderの値が変更されます。それがsecondPageに等しい場合、secondPage.xhtmlページが含まれます。 thirdPageについても同様です。

問題はメソッド呼び出しとナビゲーションが正常に動作しているfirstPageからsecondPageに、ですが、私たちは、コマンドボタンをクリックするとsecondPageで、それはmyManagedBeanの唯一のコンストラクタを呼び出しますし、それがcontinueStepThreeAction()メソッドを呼び出していません豆の中で。 stepRenderの値のデフォルト値はfirstPageであるため、firstPage.xhtmlに移動します。

問題がどこにあるのかわかりません。どうすれば解決できますか?

+0

原因は明らかです: 'stepRender'は後続のリクエストで保持されません。しかし、私は、JSF 1.xのためにどのように実装したのでしょうか? – BalusC

答えて

0

は、リクエストスコープ内のマネージドBeanですか?セッションスコープのBeanとして宣言してセッションスコープにプッシュしようとします。

+0

しかし、sessionScoped Beanのセキュリティ上の制約に何か問題がありますか?あなたは説明してもらえますか – srinivas

+0

あなたのアプリの範囲とあなたが表示されるデータの重要性を知っていませんかもしあなたがそうであればログイン/ログアウトの仕組みを設定しておく必要がありますこの段階での潜在的なリスク。あなたが「安全保障上の制約」と言うとき、あなたの心の中には、正確に何がありますか?私たちのアプリで –

+0

私たちはデータを取得するためにサードパーティのAPIにアクセスしています。私は、BeanスコープがセッションスコープのときにサードパーティのAPIがシリアル化インターフェイスを実装していないと、処理できないと考えています。 – srinivas

関連する問題