Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

How to using Sling Models in Component Java Class

pdg2491
Level 2
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
rampai
Correct answer by
Level 5
Level 5

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
rampai
Correct answer by
Level 5
Level 5

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

Jörg_Hoh
Employee
Employee

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

pdg2491
Level 2
Level 2

I understood, Thank you for reply