Faces Config中的类参数

时间:2010-03-18 12:51:35

标签: java class jsf faces-config

有没有办法将类作为Class对象传递给属性?

即。

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

2 个答案:

答案 0 :(得分:4)

是。但它将被实现为String。您可以使用Class

将bean中的Class.forName(clazz)转换为<property-class>java.lang.Class</property-class>

您可以尝试使用{{1}},但我不确定是否有内置的转换器

答案 1 :(得分:1)

不,没有办法。只有当有问题的类具有(默认)no-arg构造函数时,才可以执行此操作。 java.lang.Double没有。{1}}。另外,理论上你的构造是无效的。如果在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);
        }
    }

}