1

本番環境では、ユーザーがプロパティ ファイルを作成し、そのファイルを本番サーバーにアップロードできるようにしたいと考えています。これが配置されると、richfaces スキンに必要なプロパティが含まれます。このファイルの名前は何でもかまいません。

WEB-INF/myprop.properties開発中、他のすべてのプロパティ ファイルがある内部からプロパティ ファイルを読み取る必要があります。このファイルの名前は何でもかまいません。

これまでのところ、私はこれを行ってきました:

@ManagedBean(name="myCustomSkin ")
@ApplicationScoped
public class MyCustomSkin extends SkinFactoryImpl {
    /*
     * In here I call 
     * Skin s = this.buildSkin(context, "skin"); in my constructor
     * I am also overriding the loadProperties() method so it load my properties just fine
     * For some reason I can't get my app to actually use the properties I have loaded
     */
}

何か案は?基本的に、Tomcat 7 サーバーの起動時に初期化される ApplicationScoped ManagedBean を介して、richfaces アプリケーションを動的にスキンしたいと考えています。理想的には、スキン ファイルの名前は、データベースまたは別のプロパティ ファイルから読み取られる可能性のある動的なユーザー入力になります。

編集1:プロパティファイルをロードするためにそれを取得し、手動で(Javaコードを介して)次のように値を取得する文字列変数であるservletContext.setInitParameter("org.richfaces.skin", this.skin);場所を使用してコンテキストパラメータを挿入しようとしました:そして、上記が表示されている場合はから返されるスキン オブジェクトだけです。これは、スキンがクラスパスなどに配置されていないと想定しているためです。this.skinthis.skin = s.getName();sthis.buildSkinSkinNotFound Exception

編集 2: JSF 2.1.17、Richfaces 4.3.0、Tomcat7 の使用

編集 3: ファイルを別のディレクトリで探すように richfaces に指示する方法はありmyskin.skin.propertiesますか?

ありがとう

4

1 に答える 1

1

この RichFaces ソース コードのようなものを実装することは、あなたの親友です。

これが私があなたが望むことを行う方法を見つけたものです:

ファイルを jar に追加します (または、クラスパスに表示される任意の場所) META-INF/services/org.richfaces.application.Module 。ファイルの内容は次のようになります。com.example.CustomModule

カスタム モジュールの実装は次のようになります。

public class CustomModule implements Module {
    public void configure(ServicesFactory factory) {
        factory.setInstance(SkinFactory.class, new CustomSkinFactoryImpl());
    }
}

次に、必要に応じて SkinFactory を実装します。たとえば、(CustomSkin でデフォルトの動作を拡張する場合):

public class CustomSkinFactoryImpl extends SkinFactoryImpl {
    public Skin getSkin(FacesContext context) {
        return new CompositeSkinImpl(new CustomSkin(), super.getSkin(context));
    }
}
于 2013-02-28T20:45:19.850 に答える