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

xssApi value isnt printing

Avatar

Level 6

Hi All,

I have a breadcrumb component When I check the HTML code of the breadcrumb on page, there is  some JSP logic is shown and not translated correctly.

Vani1012_0-1672058974116.png

<sly data-sly-test="${! currentpage.properties.breadcrumbsHide}">
<sly data-sly-use.crumb="com.atlascopco.aem.ac_commons.core.components.BreadCrumb">
<sly data-sly-test="${!crumb.emptyBreadcrumb}">
<div class="c-row">
<div class="c-breadcrumb">
<ul class="o-list c-breadcrumb__list" data-sly-list.breadCrumb="${crumb.breadCrumbEntries}">
<li class="c-breadcrumb__item">
<a href="${breadCrumb}.html"
onclick="CQ_Analytics.record({event:'followBreadcrumb',values: { breadcrumbPath: '<%=xssAPI.getValidHref(sample.getPath())%>' },collect: false,options: { obj: this },componentPath: '<%=resource.getResourceType()%>'})"
class="c-breadcrumb__link">${crumb.breadCrumbEntries[breadCrumb]}</a>
</li>
<li data-sly-test="${breadCrumbList.last}" class="c-breadcrumb__item">${crumb.text}</li>
</ul>
</div>
</div>
</sly>
</sly>
</sly>

I tried adding @CONTEXT='scriptString', 'html', 'text' on <%=xssAPI.getValidHref(sample.getPath())%>' } but nothing works.

When I check sample.getPath() on the console I am getting sample not defined.

1 Accepted Solution

Avatar

Correct answer by
Level 6

HI @Vani1012 ,

 

I think these Steps might helps you.

Step 1:  Write two more methods in your existing Java Model class "crumb" to print your breadcrumb path & Resource Type. Here I gave sample code.

    
    @ValueMapValue(name=PROPERTY_RESOURCE_TYPE, injectionStrategy=InjectionStrategy.OPTIONAL)
    @Default(values="No resourceType")
    protected String resourceType;
    
    public String getResourceType() {
    	
    	return resourceType;
    }
    public String getcurrentPagePath() {
        currentPagePath =    Optional.ofNullable(pageManager)
                .map(pm -> pm.getContainingPage(currentResource))
                .map(Page::getPath).orElse("");
    	
    	return currentPagePath;
    }

Step 2: Remove JSP code & pick path & resourceType from the java class as shown below.

                onclick='CQ_Analytics.record({
                event:"followBreadcrumb",
                values: { breadcrumbPath: ${crumb.currentPagePath} },
                collect: false,options: { obj: this },
                componentPath: ${crumb.resourcePath}
        })' 

  

Please let me know if this helps!

 

Regards,

Aditya Ch.

View solution in original post

5 Replies

Avatar

Correct answer by
Level 6

HI @Vani1012 ,

 

I think these Steps might helps you.

Step 1:  Write two more methods in your existing Java Model class "crumb" to print your breadcrumb path & Resource Type. Here I gave sample code.

    
    @ValueMapValue(name=PROPERTY_RESOURCE_TYPE, injectionStrategy=InjectionStrategy.OPTIONAL)
    @Default(values="No resourceType")
    protected String resourceType;
    
    public String getResourceType() {
    	
    	return resourceType;
    }
    public String getcurrentPagePath() {
        currentPagePath =    Optional.ofNullable(pageManager)
                .map(pm -> pm.getContainingPage(currentResource))
                .map(Page::getPath).orElse("");
    	
    	return currentPagePath;
    }

Step 2: Remove JSP code & pick path & resourceType from the java class as shown below.

                onclick='CQ_Analytics.record({
                event:"followBreadcrumb",
                values: { breadcrumbPath: ${crumb.currentPagePath} },
                collect: false,options: { obj: this },
                componentPath: ${crumb.resourcePath}
        })' 

  

Please let me know if this helps!

 

Regards,

Aditya Ch.

Avatar

Community Advisor

Hi @Vani1012 , As @Kiran_Vedantam mentioned as per best practices, we should try to leverage HTL instead of jsp. I would also like to suggest to explore if the Breadcrumb component from the AEM core component library matches your requirements and use that.

Avatar

Community Advisor

what is sample in 

sample.getPath()

 You don't have to use explicit xssAPI.getValidHref(sample.getPath()) for link instead use HTL context e.g. url

href="${sample.path @ context='uri'}

 

I think the expression is not correct that is why it is ot working, I would suggest try to debug below

 

onclick="CQ_Analytics.record({event:'followBreadcrumb',values: { breadcrumbPath: '<%=xssAPI.getValidHref(sample.getPath())%>' },collect: false,options: { obj: this },componentPath: '<%=resource.getResourceType()%>'})"