クラスをClassオブジェクトとしてプロパティに渡す方法はありますか?
すなわち
<managed-property>
<property-name>clazz</property-name>
<value>java.lang.Double.class</value>
</managed-property>
クラスをClassオブジェクトとしてプロパティに渡す方法はありますか?
すなわち
<managed-property>
<property-name>clazz</property-name>
<value>java.lang.Double.class</value>
</managed-property>
はい。しかし、それは文字列として実現されます。Class
必要に応じて、Bean でそれを変換できます。Class.forName(clazz)
を使ってみてもいいかもしれ<property-class>java.lang.Class</property-class>
ませんが、その組み込み用のコンバーターがあるかどうかはわかりません
いいえ、仕方がありません。これは、問題のクラスに (デフォルトの) 引数なしのコンストラクターがある場合にのみ可能です。には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);
}
}
}