2011-12-06 18 views
2

私はjsf2、spring、hibernateを使ってWebアプリケーションを開発しています。 (getBundleのを使用して)そのキーからのメッセージを取得するためのプロパティファイルを読み込みJSFアプリケーションスコープのマネージドBeanの注入

  • 私は

    は、次のような方法で、utilのJSFと(「utilsJSF」と呼ばれる)マネージドBeanを「アプリケーションがスコープ」持っています。
  • 後でビューに表示する文字列をfacesmessageとして追加します。
  • など

すべての私のコントローラはこの1つを拡張し、それらのユーティリティにアクセスできるように、私は、(「管理プロパティ」のように)私の「ベースコントローラ」で、このBeanを注入します。ここで私は問題ありません。

しかし、これらのユーティリティを「マネージドBean」以外の他のクラスから使用するにはどうすればよいですか?

私は自分自身を説明します:

キーは例外の名前で、値がメッセージここで私は、それぞれの特定の例外クラスは、リソースバンドル(プロパティファイル)にアクセスしなければならない例外階層を持っています私はユーザーに見せます。例外コンストラクタはファイルから値を取得し、それを例外のフィールドに格納し、コントローラはメッセージをfacesmessageとしてユーザに表示します。

"utilsJSF"マネージドBeanを使用してコントローラからメッセージを表示することができます。これはBaseControllerに注入したためです。

しかし、(例外クラスはマネージドBeanではないので)使用するためには、例外クラスに "utilsJSF"を挿入できません。

この問題を解決する最適なソリューションは何ですか?

答えて

2

これらのユーティリティメソッド(public static)は、実数ユーティリティクラスにリファクタリングする必要があります。アプリケーションスコープ付きBeanには保持しないでください。

public final class Faces { 

    private Faces() { 
     // Prevent construction. 
    } 

    public static void addGlobalInfoMessage(String summary) { 
     FacesContext.getCurrentInstance().addMessage(null, 
      new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null)); 
    } 

    // ... 
} 

この方法でどこでも使用できます。バンドルメッセージを取得するために同様のものを作成します。

+0

ありがとうございますBalusC。私の第一の解決策は静的メソッドを使うことでした。私はちょうど別の方法が存在するかどうか疑問に思っていた。実際、私はウェブサイトでそれを読んだだけで、アプリケーションスコープのbeanにutilsメソッドを置こうとしました。しかし、アプリケーションスコープのBeanはアプリケーションのデータ(定数、静的リストなど)を格納するためのものであり、ユーティリティメソッドを保持するものではないと思いますか?ありがとう、私はあなたに非常に感謝し、あなたのウェブを読む。 (申し訳ありませんが、私の英語はあまり良くありませんが、私はスペイン出身です)。 – choquero70

+0

クラスが状態を保持していない場合、それをステートフルなクラスにする必要はありません。ただし、アプリケーションスコープのBeanは、静的なドロップダウンリストなどのビューにアプリケーション全体のデータを公開するのに便利です。 – BalusC

関連する問題