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
>>
>
>

Reply via email to