How to using Sling Models in Component Java Class

Avatar

Avatar

pdg2491

Avatar

pdg2491

pdg2491

22-08-2019

Hi,

I want to use Sling Models to configure the component as I saw in the "Sling Models Vs WCMUsePojo'' posting.

through the tutorial and configured a custom component using Sling Models,

but Annotation fails when trying to place Java Class File in jcr_root / apps path.

Search for Use Case confirmed that WCMUsePojo is available.

How can i use Sling Models to local java-class in Component Folder?

( * pom.xml file went the same way as the tutorial setup. :  5 - Custom Component )

* Component Structure

└─apps

    └─wcde

        └─components

            └─content

                └─test

                    └─mid_hero

                        │  .content.xml

                        │  Controller.java

                        │  mid-hero.html

                        │  _cq_editConfig.xml

                        │

                        └─_cq_dialog

                                .content.xml

* Local Java Class File (Controller.java)

package apps.wcde.components.content.test.mid_hero;

import org.apache.sling.api.resource.Resource;

import org.apache.sling.models.annotations.DefaultInjectionStrategy;

import org.apache.sling.models.annotations.Model;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.inject.Inject;

@Model(

        adaptables = { Resource.class },

        defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL

        )

public class Controller implements apps.wcde.components.content.test.mid_hero.Controller {

    private static final Logger logger = LoggerFactory.getLogger(Controller.class);

    @Inject

    protected String title;

    public String getTitle() {

        return title;

    }

}

* htl (mid-hero.html)

<sly data-sly-use.data="apps.wcde.components.content.test.mid_hero.Controller"/>

<div style="font-size: 40px;"> TEST COMPONENT </div>

<div style="font-size: 20px;"> ${data.title} </div>

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

rampai

Avatar

rampai

rampai

23-08-2019

Hi pdg2491​,pdg2491

I don't think you can include Sling models in components because Sling models are annotation driven POJOs deployed via OSGi bundle.

As stated in the Sling documentation:

The Java Use Provider can be used to load OSGi services, objects exported by bundles or backed by a Resource.

Sling Models Use Provider works in a different manner.

Refer this for more info.

Answers (2)

Answers (2)

Avatar

Avatar

Jörg_Hoh

Employee

Total Posts

3.0K

Likes

910

Correct Answer

1.0K

Avatar

Jörg_Hoh

Employee

Total Posts

3.0K

Likes

910

Correct Answer

1.0K
Jörg_Hoh
Employee

23-08-2019

as @rampai already pointed out, SlingModels work differently than WcmUsePojo classes, and you need to have more metadata to make them work. Thus you have to deploy them as part of a bundle.

Jörg

Avatar

Avatar

pdg2491

Avatar

pdg2491

pdg2491

26-08-2019

I understood, Thank you for reply