Есть ли способ передать класс в свойство как объект класса?Параметр класса в Faces Config
т.е.
<managed-property>
<property-name>clazz</property-name>
<value>java.lang.Double.class</value>
</managed-property>
Есть ли способ передать класс в свойство как объект класса?Параметр класса в Faces Config
т.е.
<managed-property>
<property-name>clazz</property-name>
<value>java.lang.Double.class</value>
</managed-property>
Нет, нет путь. Это возможно только в том случае, если класс, о котором идет речь, имеет конструктор no-arg по умолчанию. У 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);
}
}
}
Да. Но это будет реализовано как String. Вы можете превратить его в Class
в вашем бобе везде, где это необходимо, с помощью Class.forName(clazz)
Вы можете попробовать использовать <property-class>java.lang.Class</property-class>
, но я не уверен, что есть конвертер для этого встроенного
Вот на самом деле не проходит класс в ... –
@DD Я думаю, что вы немного поспешным на кнопку downvote. Это работает, и, не увидев ваш боб сам, я не могу сказать больше. – Bozho
Извинения, я должен был быть более ясным в своем оригинальном посте. Будет редактировать, чтобы сделать его более понятным. –