質問

ある程度詳しく説明します。Jsf はデザイナーの観点から見ると非常に面倒で、手を後ろで縛られながら絵を描こうとするようなものですが、フォームを噛み砕いて大量のデータをリストするのには適しています。したがって、私の会社で作成しているサイトは、jsf 管理ページと jsp ユーザーページです。ユーザーページに複雑なフォームなどがあり、jsf が動き始めると問題が発生します。

質問は次のとおりです。私は純粋な JSP ページにいます。セッション Bean を使用する JSF ページにアクセスする必要があります。そのBeanを初期化するにはどうすればよいですか?jsf ページにいる場合は、データを準備する commandLink を使用できます。私が思いつく唯一のことは、作業を実行して必要なjsfページにリダイレクトするダミーのjsfページを用意することですが、それは一種の醜いものであり、最終的に50のダミーページになりたくありません。むしろ、必要なパラメータを使用してすでにセッション中のBeanを再初期化するメカニズムを見つけたいと思っています。

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

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

役に立ちましたか?

解決

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

ただし、このソリューションは環境によっては少し脆弱になる可能性があります。

編集:Chris Hall の回答を参照してください。 FacesContext 以外では利用できません FacesServlet.

他のヒント

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

また、jsfc タグを使用した優れた設計時のセマンティクスもサポートしています。

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

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

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

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

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

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

カスタム JSP タグ ハンドラーを作成します。その後、セッション スコープから Bean を取得し、その場で初期化できます。これを参照してください チュートリアル 詳細については。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top