1

PortletRequestポータル アプリケーションから特定の情報を取得する必要があります。これは、ポートレット アプリケーション内のユーティリティ メソッドを使用して行います。この Utility メソッドではFacesContext.getCurrentInstance().getRequest()、PortletRequest を取得するためにアクセスします。DAO レイヤーでこの Utility メソッドにアクセスします。ここではリクエスト パラメータにアクセスできません。時々うまくいきますが、時々私に与えますNullPointerException。これについて説明する同様のスレッドを見つけました。彼らは、それが同じリクエストの一部である場合、コンテキストを取得する必要があると述べています。私にとっては、同じリクエストの一部ですが、コンテキストがわかりません。手伝ってくれませんか。

4

2 に答える 2

0

FacesContext.getCurrentInstance() から null の FaceContext を取得している場合、この Thread/Request に対して FacesContext が構築されていません。

失敗したリクエストは、faces 以外のエントリ ポイントから来ていますか? イベントまたはリソース ポートレット リクエストなどですか。その場合、FacesContext は作成されません。

DAO のデータにアクセスするために静的メソッドとスレッド ローカル ストレージに依存するのではなく、PortletRequest から必要なものを抽出し、それをスタックに渡すことを検討する必要があります。FaceContext や PortletRequest などのプレゼンテーション レイヤー アーティファクトを DAO レイヤーと混在させるのは悪い習慣です。

于 2011-08-31T14:32:56.943 に答える
0

アプリケーションが個別の WAR/JAR ファイルにデプロイされている場合、異なるクラスローダーが使用される可能性があります。JBOSS5 で休止状態の HAR アーカイブ内の FacesContext にアクセスしようとしたときに、同様の問題が発生しました。リフレクション API を使用して成功したソリューションを思いつきました。これを見てください。

アプリケーション全体を 1 つの EAR にバンドルすると、耳全体に対して 1 つのクラスローダーの使用を強制できる場合がありますが、これはアプリケーション サーバー固有のものです。

よろしく

于 2011-11-15T11:31:16.593 に答える