我想在AEM中实现一个可扩展的模板机制,以便允许组件用户控制各个项目(设计)的标记,而无需修改组件'预定义的JSP。
我已经扩展了<cq:include>
标记以允许这一点,通过传递模板名称,然后从当前设计中检索该模板名称,当设计中不存在覆盖时,该模板名称将回退到默认标记:
<ct:template name="listNav/prev" />
这应该从[1]加载jsp脚本,除非该位置不存在,默认为[2]:
/etc/designs/projectName/component_templates/listNav/prev.jsp
/etc/designs/component_templates/listNav/prev.jsp
使用扩展标记时,我收到异常(是的,文件存在):
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
与设计保持一致。
答案 0 :(得分:2)
我认为将应用程序脚本放到其他位置是个好主意。它们应该位于/ apps下。
但我认为如果你将/ etc路径添加到&#34;资源搜索路径&#34;它可以工作。这项服务: 系统/控制台/的ConfigMgr / org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
答案 1 :(得分:1)
您可以选择不同的设计&#34;在高级页面属性选项卡中! afaik你应该使用这种机制向你的页面声明不同的设计,即样式表等,并且因为如果正确实施,你不需要在jsp上修改任何东西以在不同的样式之间切换。
看看这个: