AEM从/ etc / designs中提供动态内容(JSP)

时间:2014-10-10 23:06:57

标签: cq5 aem sling

我想在AEM中实现一个可扩展的模板机制,以便允许组件用户控制各个项目(设计)的标记,而无需修改组件'预定义的JSP。

我已经扩展了<cq:include>标记以允许这一点,通过传递模板名称,然后从当前设计中检索该模板名称,当设计中不存在覆盖时,该模板名称将回退到默认标记: <ct:template name="listNav/prev" />

这应该从[1]加载jsp脚本,除非该位置不存在,默认为[2]:

  1. /etc/designs/projectName/component_templates/listNav/prev.jsp
  2. /etc/designs/component_templates/listNav/prev.jsp
  3. 使用扩展标记时,我收到异常(是的,文件存在):

    Caused by: org.apache.sling.api.SlingException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Could not find script /etc/designs/component_templates/listNav/prev.jsp

    当component_templates在/apps下时,这一切都有效。有没有办法让这项工作?有更好的方法吗?如果可能的话,我更愿意将component_templates与设计保持一致。

2 个答案:

答案 0 :(得分:2)

我认为将应用程序脚本放到其他位置是个好主意。它们应该位于/ apps下。

但我认为如果你将/ etc路径添加到&#34;资源搜索路径&#34;它可以工作。这项服务: 系统/控制台/的ConfigMgr / org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl

答案 1 :(得分:1)

您可以选择不同的设计&#34;在高级页面属性选项卡中! afaik你应该使用这种机制向你的页面声明不同的设计,即样式表等,并且因为如果正确实施,你不需要在jsp上修改任何东西以在不同的样式之间切换。

enter image description here

看看这个:

Adobe AEM Designs