4

少し詳しく説明します。Jsf は、デザイナーの観点から作業するのは非常に苦痛で、背中に手を縛られて絵を描こうとする程度ですが、フォームをかみ砕いたり、大量のデータをリストしたりするのには適しています。私の会社で作成しているサイトは、jsf 管理ページと jsp ユーザー ページです。ユーザーページに複雑なフォームや要素が含まれていて、jsf が起動し始めると、問題が発生します。

ここに質問があります:私は純粋なjspページにいます。セッション Bean を使用する jsf ページにアクセスする必要があります。その Bean を初期化するにはどうすればよいですか? 私がjsfページにいた場合、データを準備するcommandLinkをいくつか持つことができました。私が思いつくことができる唯一のことは、仕事をして必要なjsfページにリダイレクトするダミーのjsfページを持つことですが、それはちょっと醜いので、50個のダミーページで終わりたくありません. 必要なパラメーターを使用して既にセッションにある Bean を再初期化するメカニズムを見つけたいと思います。

編集:いくつかの詳細。この特定の状況では、完全またはフィルター処理されたテストがあります。これは、テストがフィルター処理されている場合を除き、同じロジックとすべてを備えた同じテストであり、回答に応じていくつかの質問を排除する必要があります。リンクをクリックすると、要求されたテストが 2 つのモードのいずれかで開始されます。リンクはメイン メニュー ツリーの一部であり、多くの兄弟 JSP ページで表示されます。私の仕事は、testA full、testAfiltered、testB full、testBfiltered の 4 つのリンクを用意することです。すべて同じ jsf ページにつながり、それに応じて TestFormBean を再初期化する必要があります。

編集: Facelets について少し調べましたが、今は役に立ちませんが、次のプロジェクトでは必ず覚えておきます。

4

5 に答える 5

4

Faceletsの使用を検討しましたか?これにより、JSF/JSP の違い全体を取り除くことができます (代替の優れたビュー コントローラーです)。

また、jsfc タグによる優れた設計時のセマンティクスもサポートしています...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

内部で正しい JSF に変換されるため、既存のツールで作業できます。

于 2008-09-04T11:46:29.847 に答える
3

次のようなものを使用して、タグ ライブラリ内のマネージド Bean を取得できます。

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

ただし、JSF ページの 1 つからタグ ライブラリを使用する必要があります。FacesContext.getCurrentInstance() は、FacesServlet の外部で呼び出されると null を返します。

于 2008-09-16T13:33:47.460 に答える
1

これを解決するには、フォームのみを含む JSF フラグメントを作成し、<c:import>タグを使用してそれを JSF ページに含めます。

ただし、そのソリューションは、環境によってはおそらく少し脆弱です。

FacesContext編集: Chris Hallの回答を参照してくださいFacesServlet

于 2008-09-15T15:21:33.043 に答える
0

Create a custom JSP tag handler. You can then retrieve the bean from session scope and then initialize it on the fly. See this tutorial for more details.

于 2008-09-16T03:00:31.727 に答える
0

実際には、セッションから Bean を削除することでこれを解決したので、jsf ページが呼び出されたときに再度生成する必要があります。次に、コンストラクターでリクエストからパラメーターを取得します。

于 2008-09-16T12:08:02.703 に答える