【问题标题】:Class parameter in Faces ConfigFaces Config 中的类参数
【发布时间】:2010-03-18 12:51:35
【问题描述】:

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

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

【问题讨论】:

    标签: java class jsf faces-config


    【解决方案1】:

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

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

    【讨论】:

    • @DD 我认为您在否决按钮上有点草率。这行得通,而且没有看到你的 bean 本身,我不能说更多。
    • 道歉我应该在我的原始帖子中更清楚。将进行编辑以使其更清晰。
    【解决方案2】:

    不,没有办法。这只有在相关类具有(默认)无参数构造函数时才有可能。 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);
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 2017-09-18
      • 2011-06-02
      • 2013-04-14
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多