2010-08-02 4 views
0

J'utilise Seam 2.0 et j'ai une variable d'instance dans mon haricot commeSeam - @In identité Identité non injection et plaids exception nullpointer

@In Identity identity 

et quand je l'utilise identity.getUserName() il jette NullPointerException. Quelqu'un peut-il me dire s'il vous plaît ce que je manque ici en plus?


Mise à jour: J'ai défini la variable d'instance de haricot comme ci-dessous:

@In Identity identity; 

Puis dans mon constructeur de haricot j'ai simplement ajouté ci-dessous ligne pour accueillir l'utilisateur -

System.out.println("Welcome - " +identity.getUsername()); 

I voir l'erreur ci-dessous sur ma console Jboss:

Caused by: java.lang.NullPointerException 
    at com.lntebg.quality.QualityInspectionPlan.<init>(QualityInspectionPlan.java:63) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.jboss.seam.Component.instantiateJavaBean(Component.java:1315) 
    at org.jboss.seam.Component.instantiate(Component.java:1271) 
    at org.jboss.seam.Component.newInstance(Component.java:1973) 
    ... 279 more 
+2

voulez-vous s'il vous plaît attacher la trace complète de la pile? –

Répondre

1

Quelques idées:

  • Vous injectent identité dans un composant Seam? Seam ne peut pas injecter à l'intérieur du constructeur.
  • Avez-vous ces extraits dans votre fichier components.xml?

<core:init security-enabled="true" />

et

<security:identity />

1

Seam n'injectent pas les variables jusqu'à ce que le constructeur a été appelé, et en tant que telle la Seam injectée propriété est nulle dans le constructeur - d'où le NPE. Au lieu de référencer la propriété Seam injectée dans le constructeur, créez une nouvelle méthode telle que init() et annotez-la avec l'annotation @Create. Cette méthode sera ensuite appelée automatiquement après que l'objet a été instancié et que les propriétés Seam injectées ont été définies.

Hope this helps,

Chris

+0

+1: Merci Chris, c'était exactement ce que j'avais besoin de savoir. –