2017-08-18 1 views
0

In meinem java Code Ich habe die folgende Klasse mit:Warum das Feld macht aus übergeordneten Klasse hat einen Nullwert, wenn sie in anderen Klasse (Java/Apache Sling)

@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()); 
    } 
} 

Als ich Methode aufrufen getAllData() von dieser Klasse , Ich sehe die ID meines Benutzers - das ist in Ordnung.

Jetzt muss ich eine 2. Klasse schreiben, die die oben genannte erweitert. Es sieht so aus:

public class MyNextListModel extends ListModel{ 

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

Wie kommt es, dass der resourceResolver in der 2. Klasse einen Nullwert hat?

Ich habe auch versucht, diesen Code zu bewegen:

@Inject 
protected ResourceResolver resourceResolver; 

ListModel-MyNextListModel, aber obwohl, es ist immer noch null in der 2. Klasse

+0

Haben Sie versucht, super.resourceResolver.getUserID()? –

+0

Kyle, ich habe es versucht und es hat nicht funktioniert, leider ... – randomuser1

+0

Ich habe keine Möglichkeit, dies jetzt zu überprüfen, aber ich glaube, Sling braucht die Unterklasse selbst mit der '@ Model' Annotation kommentiert werden. Es sucht nicht nach Super-Klassen. Versuchen Sie '@Model (adaptables = SlingHttpServletRequest.class)' zu 'MyNextListModel' hinzuzufügen. – toniedzwiedz

Antwort

1

Wenn die Klasse, die von Ihrem Modell erbt das fehlt @ Model Annotation, Schlinge weiß nicht, was zu tun ist. Fügen Sie die Annotation einfach der erbenden Klasse hinzu und Ihr Code sollte funktionieren. Btw stellen Sie sicher, dass die andere Klasse auch in einem Paket ist, das als Sling-Modell-Paket in Ihrem Kern Pom registriert ist.

Verwandte Themen