1

フレックスアプリを jsf-icefaces アプリ (ice:outputmedia-tag を持つ jspx サイト内) に統合し、リモートでフレックスから Bean の同じインスタンスにアクセスしたい、その jsf 注入.

私はすでにblazedsでJava-Beanに接続しています。この Bean - 他のすべての Bean と同様に、jsf の注入によって他の Bean を取得しますが、flex からリモートで Bean にアクセスすると、注入された Bean (ローカライザーと accesmanager のように、両方ともセッション スコープ) を保持せず、接続できませんjsf セッション (FacesContext.getCurrentInstance() は null)。これは、flex が Bean の新しいインスタンスを作成し、jsf が注入する現在のインスタンスと同じではないためです。

Java Bean で新しいエンティティ マネージャーを作成することにより、flex からデータベースに接続できますが、それは私が望むものではありません。

私はエクサデルフィジーとフラミンゴを知っていますが、私のjsfアプリにはicefacesコンポーネントが含まれており、フィジーが必要とするリッチフェイスでは動作しないため、フィジーでは動作しませんでした. フラミンゴは jboss シームとスプリングでのみ動作します。それは正しいですか?

spring-flex-integration についても読みましたが、jsf アプリケーションは spring で作成されておらず、このような大規模な jsf アプリに spring を統合したくありません。昨日、FlexFactory インターフェースについて読みました。このインターフェイスは、自分の Factory に実装し、blazeds の service-config.xml に設定する必要があります。これは、factory read this . 私はまだ独自のファクトリを実装していますが、FlexContext.getServletContext().getAttribute("Bean"); を介して取得するサーブレット コンテキストを介してアプリケーション スコープの Bean のみを取得します。セッションスコープのBeanではありません...

throw flex と jsf を接続する機会があることを願っています...ありがとう!

4

1 に答える 1

1

FacesContext.getCurrentInstance()がnull

これは、現在のリクエストがに渡されていない場合にのみ発生しFacesServletます。つまり、リクエストURLがのと一致しませんでしurl-patternFacesServletFacesContextつまり、スレッドローカルインスタンスの作成を担当します。

しかし、実際にはここは必要ありませんFacesContext。JSFはサーブレットAPIの最上位で実行されるため、低レベルに移行して、セッションスコープのマネージドBeanを取得するために使用することもできます。JSFは、セッションスコープのマネージドBeanHttpSessionを、マネージドBean名をキーとするの属性として格納します。

したがって、たとえば、管理対象Bean名myBeanを持つセッションスコープの管理対象BeanがありHttpServletRequest、手元にある場合は、次のようにアクセスすることもできます。

MyBean myBean = (MyBean) request.getSession().getAttribute("myBean");
于 2010-01-25T11:51:47.900 に答える