Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

How to let the dispatcher not cache certain component?

Avatar

Level 3

Hi

  I have a componenet that has some dynamic content. And I don't want to dispatcher to cache this part.  So inspired by http://www.slideshare.net/netceteragroup/dynamic-components-using-singlepageapplication-concepts-in-... (Page 4), This is what I did, under apps/myapp/dynamicComponent, I have a two files, one is dynamicComponent.jsp and the other is dynamicComponent.dynamic.jsp, So in dynamicComponent.dynamic.jsp page, I have some JSP code to render the dynamic content. and in dynamicComponenet.jsp, I am using SSI to include this like this

<div color="red">render this</div> <!--# include virtual="<%=currentNode.getPath().replace("jcr:content","_jcr_content")%>.dynamic.html" />

So I decide to directly hit the page component link like this http://localhost:4505/content/myapp/mypage/_jcr_content/rightPar/dynamicComponent.dynamic.html page, and it didn't show me this red "render this" text, so apparently, it didn't render me anything.

Can someone tell me what is wrong?

1 Accepted Solution

Avatar

Correct answer by
Employee

Try hitting your component without the 'dynamic' selector (for example, http://localhost:4505/content/myapp/mypage/_jcr_content/rightPar/dynamicComponent.html). The contents of dynamicComponent.jsp (including 'render this') will not be included in the response when the selector matches another script.

I would also suggest renaming dynamicComponent.dynamic.jsp to simply dynamic.jsp.

View solution in original post

7 Replies

Avatar

Correct answer by
Employee

Try hitting your component without the 'dynamic' selector (for example, http://localhost:4505/content/myapp/mypage/_jcr_content/rightPar/dynamicComponent.html). The contents of dynamicComponent.jsp (including 'render this') will not be included in the response when the selector matches another script.

I would also suggest renaming dynamicComponent.dynamic.jsp to simply dynamic.jsp.

Avatar

Employee Advisor

Hi,

You can use the "recent requests" view in the OSGI webconsole to get insight what a request was actually doing. I don't see any obvious problem in your usecase, so you might find there some more information.

kind regards,
Jörg

Avatar

Level 3

Bruce Lefebvre wrote...

Try hitting your component without the 'dynamic' selector (for example, http://localhost:4505/content/myapp/mypage/_jcr_content/rightPar/dynamicComponent.html). The contents of dynamicComponent.jsp (including 'render this') will not be included in the response when the selector matches another script.

I would also suggest renaming dynamicComponent.dynamic.jsp to simply dynamic.jsp.

 

I have changed to dynamic.jsp, yes, it starts to show some right thing. At least this "render this" is showing up. So I guess I am on the right track. But now, how do I do a SSI include?

Till now if I directly hit the  http://localhost:4505/content/myapp/mypage/_jcr_content/rightPar/dynamicComponent.html, I can see the component is showing correctly. But When I put this code to dynamicComponent.jsp  it just not show the include. Any idea why?

<div color="red">render this</div> <!--# include virtual="<%=currentNode.getPath().replace("jcr:content","_jcr_content")%>.dynamic.html" -->

Avatar

Employee

SSI includes are a feature of the web server, so you will need a dispatcher in front of your instance in order to use them (see answer at [0]). 

[0] also contains a suggestion to query WCMMode from within your JSP and use a <cq:include to make your content available in author mode, with no dispatcher present.

[0] https://forums.adobe.com/thread/1227938

Avatar

Level 3

Hi,

  Thanks for the link. It is really helpful! I have managed to setup the SSI. But One thing confusing me is how do I differ the WCMMode in publish instance from dispatcher? This is what I wrote in the code, author and dispatcher are working fine, But the publish instance does not show. Any idea?

<% String path = currentNode.getPath().replace("jcr:content", "_jcr_content") +".dynamic.html"; %> <% boolean authormode = ((WCMMode.fromRequest(request) == WCMMode.EDIT) || (WCMMode.fromRequest(request) == WCMMode.DESIGN) ||(WCMMode.fromRequest(request) == WCMMode.PREVIEW) ); if (authormode) { %> <sling:include path="<%=path%>" /> <% } else { %> <!--#include virtual="<%=currentNode.getPath().replace("jcr:content", "_jcr_content")%>.dynamic.html" /> <% }

Avatar

Level 2

Hi Rui,

Did you ever bump upon this one:

https://github.com/Cognifide/Sling-Dynamic-Include

This library is doing exactly the thing that you are trying to implement, so maybe instead of reinventing the wheel... ;)