0

私の JSF アプリケーションでは、requestScope として設定されている値と、sessionScope で設定されている値があります。たとえば、予約を行う場合、DTO は sessionScope に保存されるため、予約が正常に送信された後に次のページ以降で使用できるようになります。したがって、ユーザーは次のページで予約をテンプレートとして保存し、後でそのテンプレートを使用できます。テンプレートを保存すると、ユーザーはホームページにリダイレクトされます。これらの予約値は sessionscope に保存されますが、requestScope で設定された成功した送信ページでのみ必要なその他の値もあります。そのため、requestScope は、このページをロードするときに必要な作業を行いました。次に、ユーザーが既にテンプレートとして保存できる名前を使用すると、バッキング Bean でデータベースをチェックインした後、ページが同じページに戻ってエラー メッセージが表示されるという問題に直面しました。ホームページに転送する代わりに。予約値はsessionScopeに保存されるので問題ありません。しかし、requestScope に保存されている他の値は失われ、jsp ページで nullPointerException が発生します。他の値に sessionScope を使用せずにタスクを達成する方法はありますか? 私が考えた方法の 1 つは、jsp で postrender 関数を使用して、バッキング Bean でこれらの requestscope 値を再度設定することでした。しかし、リクエスト値が postrender で利用できるかどうかはわかりません。誰かがこれについて私を助けてくれますか? 私が考えた方法の 1 つは、jsp で postrender 関数を使用して、バッキング Bean でこれらの requestscope 値を再度設定することでした。しかし、リクエスト値が postrender で利用できるかどうかはわかりません。誰かがこれについて私を助けてくれますか? 私が考えた方法の 1 つは、jsp で postrender 関数を使用して、バッキング Bean でこれらの requestscope 値を再度設定することでした。しかし、リクエスト値が postrender で利用できるかどうかはわかりません。誰かがこれについて私を助けてくれますか?

4

2 に答える 2

0

質問にはこの情報がありませんが、まだレガシー JSF 1.x を使用しており、新しいビュー スコープを提供する JSF 2.x に移行できないと仮定します。そうでなければ、これを尋ねなかったでしょう。質問。また、IBM タグの存在は、レガシー モンスターに関する何かを暗示しています。

JSF 1.2 用のTomahawkを取得し、ビュー内の任意の場所でリクエスト スコープ Bean を参照します<t:saveState>

<t:saveState value="#{managedBeanName}" />

それで全部です。これは、新しい JSF 2.0 ビュー スコープが行っているのとまったく同じように内部で行われます。このようにして、#{managedBeanName}インスタンスは効果的にビュースコープの Bean になります。

于 2012-10-19T20:32:13.787 に答える
0

JSF 2 を使用している場合は、 @ViewScoped アノテーションを使用して、ユーザーが同じビューにいる間、Bean を有効にすることができます。

JSF 1.2 を使用している場合は、これを処理するサード パーティのライブラリを使用する必要があります。私が知っているのは次の 2 つの選択肢だけです。

  • Tomahawk ライブラリから、<t:stavestate>コンポーネントを使用できます。

  • <a4j:keepAlive>RichFaces 3.3.x から、コンポーネントまたはクラス内の注釈として使用できます。私はこれで作業しましたが、非常に役立ちます。例を挙げましょう。

faces-config.xml ファイルで RequestScope 構成が指定されたマネージド Bean。

@KeepAlive
public class Bean {
    private String name;
    //constructor...
    //getters and setters...
}

JSP/Facelets ページ:

<h:form>
    <h:outputText value="Write your name" />
    <h:inputText value="#{bean.name}" />
    <br />
    <a4j:commandButton value="Say hello!" reRender="hello" />
</h:form>
<!-- Since this is outside the form, the #{bean.name} value won't be send to the server -->
<h:outputText value="#{'Hello ' + bean.name}" id="hello" />
于 2012-10-19T20:33:55.103 に答える