首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Faces Config中的Class参数

Faces Config中的Class参数
EN

Stack Overflow用户
提问于 2010-03-18 20:51:35
回答 2查看 1.4K关注 0票数 0

有没有办法将类作为class对象传递到属性中?

代码语言:javascript
运行
复制
    <managed-property>
        <property-name>clazz</property-name>
        <value>java.lang.Double.class</value>
    </managed-property>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-27 00:46:45

不,没有办法。只有当有问题的类有一个(默认) no-arg构造函数时,这才是可能的。java.lang.Double没有。此外,从理论上讲,您的构造是无效的。如果您在定义java.lang.Double的位置使用带有(默认) no-arg构造函数的类,则可以执行以下操作:

代码语言:javascript
运行
复制
<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>

结合使用

代码语言:javascript
运行
复制
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。下面是一个启动示例:

代码语言:javascript
运行
复制
<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>

结合使用

代码语言:javascript
运行
复制
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);
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2010-03-18 20:54:45

是。但它将被实现为字符串。您可以在需要的任何地方,使用Class.forName(clazz)在bean中将其转换为Class

您可以尝试使用<property-class>java.lang.Class</property-class>,但我不确定是否有内置的转换器

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2469888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档