0

クラスをClassオブジェクトとしてプロパティに渡す方法はありますか?

すなわち

    <managed-property>
        <property-name>clazz</property-name>
        <value>java.lang.Double.class</value>
    </managed-property>
4

2 に答える 2

4

はい。しかし、それは文字列として実現されます。Class必要に応じて、Bean でそれを変換できます。Class.forName(clazz)

を使ってみてもいいかもしれ<property-class>java.lang.Class</property-class>ませんが、その組み込み用のコンバーターがあるかどうかはわかりません

于 2010-03-18T12:54:44.980 に答える
1

いいえ、仕方がありません。これは、問題のクラスに (デフォルトの) 引数なしのコンストラクターがある場合にのみ可能です。にはjava.lang.Doubleありません。また、理論的には、あなたの構造は無効です。が定義されている場所で (デフォルトの) 引数のないコンストラクターを持つクラスを使用すると、次のようになりますjava.lang.Double

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>mypackage.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>clazz</property-name>
        <property-class>java.lang.Class</property-class>
        <value>#{clazz.class}</value>
    </managed-property>
</managed-bean>

<managed-bean>
    <managed-bean-name>clazz</managed-bean-name>
    <managed-bean-class>java.lang.Double</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

と組み合わせて

public class Bean {
    private Class<?> clazz; 

    public Class<?> getClazz() {
        return clazz;
    }

    public void setClazz(Class<?> clazz) {
        this.clazz = clazz;
    }
}

として指定し、Stringを使用しClass#forName()て を取得する必要がありますjava.lang.Class。キックオフの例を次に示します。

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>mypackage.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>className</property-name>
        <value>java.lang.Double</value>
    </managed-property>
</managed-bean>

と組み合わせて

public class Bean {

    private Class<?> clazz;

    public Class<?> getClazz() {
        return clazz;
    }

    public void setClassName(String name) {
        try {
            this.clazz = Class.forName(name);
        } catch (ClassNotFoundException e) {
            throw new IllegalArgumentException("Illegal class name.", e);
        }
    }

}
于 2010-03-26T16:46:45.423 に答える