Expand my Community achievements bar.

Join us in celebrating the outstanding achievement of our AEM Community Member of the Year!
SOLVED

How to using Sling Models in Component Java Class

Avatar

Level 2

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>

1 Accepted Solution

Avatar

Correct answer by
Level 7

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.

View solution in original post

3 Replies

Avatar

Correct answer by
Level 7

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.

Avatar

Employee Advisor

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

Level 2

I understood, Thank you for reply