2017-08-18 1 views
0

Dans mon java code que j'ai la classe suivante:Pourquoi le domaine de la classe mère a une valeur nulle lors de l'utilisation dans d'autres classes (Java/fronde apache)

@Model(adaptables = SlingHttpServletRequest.class) 
public class ListModel extends SomeList{ 

    @Inject 
    protected ResourceResolver resourceResolver; 

    //this method works fine: 
    public List<String> getAllData(){ 
     System.out.println(resourceResolver.getUserID()); 
    } 
} 

Quand j'appelle méthode getAllData() de cette classe , Je vois l'identifiant de mon utilisateur - ce qui est bien.

Maintenant j'ai besoin d'écrire une 2ème classe qui va prolonger celle ci-dessus. Il ressemble à ceci:

public class MyNextListModel extends ListModel{ 

    //this method throws nullpointer because resourceResolver is null - why? 
    @Override 
    public List<ListItemModel> getAllItems() { 
     System.out.println(resourceResolver.getUserID()); 
    } 
} 

Comment se fait la resourceResolver dans la 2e classe a une valeur nulle?

J'ai aussi essayé de déplacer ce code:

@Inject 
protected ResourceResolver resourceResolver; 

ListModel-MyNextListModel, mais même si, il est toujours nulle dans la 2e classe

+0

Avez-vous essayé super.resourceResolver.getUserID()? –

+0

Kyle, j'ai essayé et ça n'a pas marché, malheureusement ... – randomuser1

+0

Je n'ai aucun moyen de vérifier cela maintenant mais je crois que Sling a besoin que la sous-classe elle-même soit annotée avec l'annotation '@ Model'. Ce n'est pas à la recherche de super-classes. Essayez d'ajouter '@Model (adaptables = SlingHttpServletRequest.class)' à MyNextListModel '. – toniedzwiedz

Répondre

1

Si la classe qui hérite de votre modèle est absent de la Annotation @model, fronde ne sait pas quoi faire. Ajoutez simplement l'annotation à la classe héritière et votre code devrait fonctionner. Btw assurez-vous que l'autre classe est également dans un paquet qui est enregistré en tant que paquet de modèles sling dans votre noyau Pom.