Параметр класса в Faces Config - PullRequest
0 голосов
/ 18 марта 2010

Есть ли способ передать класс в свойство как объект класса?

т.е.

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

Ответы [ 2 ]

4 голосов
/ 18 марта 2010

Да. Но это будет реализовано как String. Вы можете превратить его в Class в своем бине, где бы он ни был необходим, используя Class.forName(clazz)

Вы можете попробовать использовать <property-class>java.lang.Class</property-class>, но я не уверен, что есть конвертер для этого встроенного

1 голос
/ 26 марта 2010

Нет, нет пути. Это возможно только в том случае, если рассматриваемый класс имеет конструктор (по умолчанию) без аргументов. У 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);
        }
    }

}
...