2010-03-18 3 views

ответ

1

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

} 
4

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

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

+0

Вот на самом деле не проходит класс в ... –

+0

@DD Я думаю, что вы немного поспешным на кнопку downvote. Это работает, и, не увидев ваш боб сам, я не могу сказать больше. – Bozho

+0

Извинения, я должен был быть более ясным в своем оригинальном посте. Будет редактировать, чтобы сделать его более понятным. –