Expand my Community achievements bar.

SOLVED

How can we pass sling model data to another service class

Avatar

Level 1

I wanted to pass sling model data to another service class and retrieve the response to sightly via same sling model class. Is there any way?

1 Accepted Solution

Avatar

Correct answer by
Level 3

Hi @Vainavee 

Use @inject to adopt the service. Then inside init method call that particular method of that service by passing required inputs from slingmodel. Once you get the data back from service store it in a variable. Create getter of that particular variable. In sightly using use object read the variable.

@Inject
private <Service> service;

private String test = null;

 

@PostConstruct
protected void init() {

test = this.service.<Method>(<required Param>);
}

public void getTest(){

return test;

}

-----------------
Sightly : 
<div data-sly-use.cmp="<slingmodel path>">
<h1> Var : ${cmp.test} </h1>
</div>

 

View solution in original post

2 Replies

Avatar

Level 4

Hi @Vainavee ,

 

You can inject the osgi service in your model class and then invoke the method from the service by passing params.

 

@Inject
private MyService myService;

 

@PostConstruct
protected void init() {

String firstName = this.myService.getName(param);
}

 

Refer this for more annotations and details.

https://sling.apache.org/documentation/bundles/models.html 

 

 

Avatar

Correct answer by
Level 3

Hi @Vainavee 

Use @inject to adopt the service. Then inside init method call that particular method of that service by passing required inputs from slingmodel. Once you get the data back from service store it in a variable. Create getter of that particular variable. In sightly using use object read the variable.

@Inject
private <Service> service;

private String test = null;

 

@PostConstruct
protected void init() {

test = this.service.<Method>(<required Param>);
}

public void getTest(){

return test;

}

-----------------
Sightly : 
<div data-sly-use.cmp="<slingmodel path>">
<h1> Var : ${cmp.test} </h1>
</div>