Hello Sarwar,

thank you for your response. I've considered using selectors, however
that alters the URL for the page, which is undesirable.

The other approach, using if-else statements in the JSP is something I
have prototyped using a taglib, which works fine, but it requires that
each JSP has to be wrapped into the tag.

Ideally, i could handle this completely transparently. The key idea is
to keep the actual JSPs clear of the actual switching behaviour. After
all, the same behaviour will be used in many different JSPs, and I
don't like the idea of having to rely on developers manually cutting
and pasting code between JSPs.

I was wondering how Sling selects which script actually to render.
>From my understanding that happens when Sling evaluates the
sling:resourceType field. Is there a way to hook up to that decision
process?

Regards,
Jakob

On Tue, Apr 17, 2012 at 5:36 PM, Sarwar Bhuiyan
<[email protected]> wrote:
> You could use different scripts in the same component and call them based
> on your condition.  So supposing your component is called
>
> mycomponent/
>   mycomponent.jsp
>   optiona.jsp
>   optionb.jsp
>
> In your mycomponent.jsp, you can do something like:
>
>
> <%if(condition){%>
>   <cq:include script="optiona.jsp"/>
> <%else {%}
>   <cq:include script="optionb.jsp"/>
> <%}%>
>
>
>
> Sarwar
>
>
> On Tue, Apr 17, 2012 at 10:34 PM, Sarwar Bhuiyan
> <[email protected]>wrote:
>
>> You could use a selector.  So supposing your component is called
>>
>> mycomponent/
>>
>>
>> On Tue, Apr 17, 2012 at 10:05 PM, Jakob Külzer 
>> <[email protected]>wrote:
>>
>>> 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
>>>
>>
>>



-- 
Cheers,
Jakob

Reply via email to