Expand my Community achievements bar.

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... ;)