Hello everybody,
I'm just starting to get my head wrapped around Sling and Day CQ 5 and
I'm running against an issue that I don't really understand properly.
I'm still quite new to Sling, so if you see something where I've got
an incorrect understanding feel free to jump in and correct me.
Thanks!
What I am trying to do is to replace certain request with output from
a different JSP. For example, a page contains an embedded component
which, as far as I understand, is referenced via a Sling resourceType.
When Sling renders this page, the JSP will be included; however, based
on certain conditions I'd like to render a different JSP. My naive
approach is to register a filter in the include chain, create a
RequestDispatcher for the new JSP and call the include() method.
My first question is, am I using the appropriate approach for this?
Should I look at another mechanism in Sling to do something like this?
Second, assuming a filter is the correct approach, why does it not
render my JSP?
Here're the relevant lines of code:
---->8--------------------------------------------------------------
@org.apache.felix.scr.annotations.Component(immediate = true, metatype = false)
@Service(Filter.class)
@Properties({ @Property(name = "sling.filter.scope", value = {
"include", "forward" }) })
public class ComponentFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) throws IOException, ServletException {
final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
final Resource resource = ...; // Get resource for the JSP.
if (localResource != null) {
final RequestDispatcher requestDispatcher =
slingRequest.getRequestDispatcher(resource);
requestDispatcher.include(request, response);
} else {
chain.doFilter(request, response);
}
}
}
---->8--------------------------------------------------------------
The resource is properly resolved:
*DEBUG* script: JcrNodeResource, type=nt:file, superType=null,
path=/apps/myapp/components/demo/replacment.jsp
However, I get this error:
17.04.2012 16:13:53.136 *ERROR* [127.0.0.1 [1334693633099] GET
/content/geometrixx/en/test.html HTTP/1.1]
org.apache.sling.servlets.get.impl.DefaultGetServlet No renderer for
extension html, cannot render resource JcrNodeResource, type=nt:file,
superType=null, path=/apps/myapp/components/demo/replacment.jsp
I'm not sure what to make of this. Any ideas?
Any help is appreciated! Thank you.
--
Cheers,
Jakob