0

私の問題を説明しようとします。私は非常に厳格な環境で IBM の JSF 1.2 実装を使用しています (会社のレイヤー、および厳格な制約 - ライブラリなどを追加しないでください)。

再利用できる確認用の簡単なページを作成したい(ジェネリックのようなもの)。例: 1-page1.jsp > ボタンをクリック 2-pageConfirmation.jsp > 2 つのボタン Yes または No No を 3 クリック > 戻る / Yes を 3bis クリック > someAction に移動し、page2.jsp に移動

だから、必要なもの、どこから来たのか、どこへ行きたいのかをセッションに保存したかったのです。しかし、ここに問題があります。必要なアクションを呼び出すにはどうすればよいですか? 名前は動的です。「はい」をクリックした後、コントローラーにいるとしましょう。セッションに保存した名前から「myMethodAction」を呼び出したいとします。式言語APIで評価しようと思ったのですが、ELContextにアクセスできず、elパッケージ(el-api.jar)が使えないのでブロックされています。

要約すると、クリックした後、ページを呼び出す代わりに、アクション/メソッドを呼び出してからページにリダイレクトしようとしています。

魔法のアイデアを持っている人はいますか?それとも私は完全に間違っていますか?

前もって感謝します。

4

3 に答える 3

1

完全に独立したマネージド Bean を作成し、ConfirmationBeanそれをリクエスト スコープに入れることができます。各管理プロパティ注入機能の下で「親」Bean でアクセスするか、自分で作成してリクエスト マップに入れることができます。

最初の方法はfaces-config.xml、他の多くの Bean と関連付けるには多くの作業が必要になるため、あまり魅力的ではないと思います。

2 番目の方法では、アクション メソッドに (再利用可能な) コードを少し追加するだけです。例を挙げます:

public String submit() {
    ConfirmationBean conformationBean = new ConfirmationBean();
    confirmationBean.setOutcome("outcome"); // Set navigation case outcome where it should return back.
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("confirmationBean", confirmationBean);
    return "confirm";
}

confirm.jsf非表示フィールドに「結果」が必要です。

<h:selectBooleanCheckbox value="#{confirmationBean.confirm}" />
<h:inputHidden value="#{confirmationBean.outcome}" />
<h:commandButton value="confirm" action="#{confirmationBean.submit}" />

のアクション メソッドは次のConfirmationBeanようになります。

public String submit() {
    if (confirm) {
        return outcome;
    } else {
        return "confirm";
    }
}

または、あなたが三項演算子のファンなら;)

public String submit() {
    return confirm ? outcome : "confirm";
}
于 2009-12-15T16:44:43.227 に答える
0

したがって、2 つのオプションがあります。 -このソリューションのように JSF のナビゲーション管理をオーバーライドして、to-view-id タグで EL を有効にします。

(次のメッセージの次の解決策。私はスタックオーバーフローが初めてなので制限されています)

于 2009-12-16T10:08:06.637 に答える
0

2番目の解決策: -この解決策のようにELを呼び出すアクション(セッションのconfirmationBeanに格納された文字列)を呼び出します

ここにいる一部の人にとっては便利かもしれませんが、ライブラリ (el-api) のインポートが許可されていないため、私には利用できません。

于 2009-12-16T10:12:35.927 に答える