3

私はJSF(v1.2)アプリケーションに取り組んでいます。私のアプリケーションでは、任意のリソース(PDF、画像、Excelなど)を提供できる汎用サーブレットが必要です。私の考えは、いくつかの構成を使用して正しい委任クラスを見つけることができるように、必要な情報を送信するように呼び出し元に依頼することです。

この委任クラスは、正しいリソースの提供を処理します。

たとえば、これはリクエストURLです

http://example.com/servlet?delegatorid=abcd

私のサーブレットコードはこのようなものです。

protected void doGet(HttpServletRequest request, HttpServletResponse response){
 String delegatorID=request.getParameter("delegatorid");
//Get the configuration from Configuration table
configuration=getConfiguration(delegatorID);
//invoke the method of the delegator class based on this configuration
Object result=invokeMethod(configuration);
//write the response to the stream
}

私の質問は、JSFプロジェクトでこれを行うための最良の方法は何ですか?

  1. この操作でJSF依存関係を完全に回避する必要がありますか?委任メソッドとクラスを見つけて、リフレクションを使用して呼び出すことができます。JSF依存関係を回避した場合、将来的に制限が生じる可能性はありますか?[私が考えることができる問題の1つは、コードの1つで、セッションからユーザー情報を取得する必要があることです。私はFacesContextを介してこれを行っています。FacesContextが利用できないため、失敗します。セッションを取得するための別のオプションが必要です。
  2. JSF依存関係を導入する必要がある場合、ここでFacesContextを取得するにはどうすればよいですか?私の知る限り、ここからアクセスできるのは、アプリケーションスコープに格納されているBeanのみです。やりたくない。それを取得する他の方法はありますか?
  3. サーブレットを使用する代わりに、URLを使用してManagedBeanメソッドを直接呼び出すことでこれを行うことはできますか?これにより、FacesContextが得られます。マネージドBeanメソッドを呼び出すには、ダミーのJSPページが必要だと思います。

これについての考えを聞かせてください。

4

1 に答える 1

7

FacesContextおよびExternalContext)は、、、、、などのファサードとプレーンHttpServletRequestなバニラサーブレットではまったく必要のないいくつかのJSFの詳細です。は、の抽象的なマッピングにすぎません。HttpServletResponseHttpSessionServletContextExternalContext#getSessionMap()HttpSession#get/setAttribute()

プレーンなバニラサーブレットでは、セッションは通常の方法request.getSession()でアプリケーションによって利用可能になります。getServletContext()特に、この関連する質問も参照してください。サーブレット関連のクラスでJSFマネージドBeanを名前で取得します

また、JSFとサーブレットで共有する必要のあるコードをリファクタリングして、クラスにjavax.faces.*も依存しないjavax.servlet.*(またはせいぜいjavax.servlet.*)ユーティリティメソッドにリファクタリングし、最後に呼び出し元に必要な情報を渡すこともできます。

于 2012-12-24T11:27:30.093 に答える