Hi All,
i am trying to inject some values dynamically into sling model and retrieve some properties of that injected value and print them as below which is not working and throwing a null pointer exception which is not appropriate.
i can see sling model is registered in adapters.
some one please tell me where it went wrong.
Any help is highly appreciated.
In below i want to send each item of list dynamically to sling model via "selectPath" and process the valur for a property in sling model and retrieve in "flags.flagicon"
my sightly html:
<select class="list-selector__dropdown language-change" title="languages" data-sly-list.item="${listNavigation.items}">
<sly data-sly-use.flags="${'com.krish.chopps.modules.sling.models.listselector.ListSelectorModel' @ selectPath='${item.path}' }">
<option value="${item.language}">${item.title}, ${flags.flagicon}</option>
</select>
</sly>
My Sling model:
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class })
public class ListSelectorModel {
private static final Logger logger = LoggerFactory.getLogger(ListSelectorModel.class);
@RequestAttribute
@Optional
private String selectPath;
@SlingObject
private ResourceResolver resolver;
public String getFlagicon() {
return flagicon;
}
private String flagicon;
@PostConstruct
public void init() {
if (selectPath != null) {
flagicon = getNodeValue(selectPath, "countryFlag");
}
}
private String getNodeValue(String parentPage, String property) {
logger.info("parentpage is "+ parentPage);
Resource resource = resolver.getResource(parentPage + "/jcr:content");
Node node = resource.adaptTo(Node.class);
String image = null;
try {
if (node != null && node.hasProperty(property)) {
image = node.getProperty(property).getString();
}
} catch (RepositoryException e) {
logger.info("Exception in node values : {}", e);
}
return image;
}
}
Views
Replies
Total Likes
What does 'listNavigation' object maps to in the HTL script?
Did you print/debug in model object to validate the image object?
Not sure why you don't prefer to use the 'self' annotation/object to get the data?
Views
Replies
Total Likes
in HTL i used list navigation as below
<sly data-sly-use.listNavigation="com.adobe.cq.wcm.core.components.models.LanguageNavigation"></sly>
Views
Replies
Total Likes
That's not helpful as it is your custom model/code.
Check a couple of samples --
adobe - How to display values in a List of a SlingModel using Sightly - Stack Overflow
AEM In My Way: How to display the list of children under a page using Sightly and Sling model
Views
Replies
Total Likes
Use @Inject instead of @RequestAttribute
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class })
public class ListSelectorModel {
private static final Logger logger = LoggerFactory.getLogger(ListSelectorModel.class);
@Inject
@Optional
private String selectPath;
Views
Replies
Total Likes
We cover how to work with Sling Models and Show HOW TO inject values here:
Building Experience Manager 6.5 Components using Granite/Coral Resource Types
I recommend going through this entire document to learn how to develop AEM Components - including working with Multifield.
Views
Replies
Total Likes
Use below syntax
<sly data-sly-use.flags="${'com.krish.chopps.modules.sling.models.listselector.ListSelectorModel' @ selectPath=item.path }">
and
Use @Inject instead of @RequestAttribute
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class })
public class ListSelectorModel {
private static final Logger logger = LoggerFactory.getLogger(ListSelectorModel.class);
@Inject
@Optional
private String selectPath;
Views
Replies
Total Likes