有没有办法将类作为class对象传递到属性中?
即
<managed-property>
<property-name>clazz</property-name>
<value>java.lang.Double.class</value>
</managed-property>
发布于 2010-03-27 00:46:45
不,没有办法。只有当有问题的类有一个(默认) no-arg构造函数时,这才是可能的。java.lang.Double
没有。此外,从理论上讲,您的构造是无效的。如果您在定义java.lang.Double
的位置使用带有(默认) no-arg构造函数的类,则可以执行以下操作:
<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-18 20:54:45
是。但它将被实现为字符串。您可以在需要的任何地方,使用Class.forName(clazz)
在bean中将其转换为Class
您可以尝试使用<property-class>java.lang.Class</property-class>
,但我不确定是否有内置的转换器
https://stackoverflow.com/questions/2469888
复制相似问题