我想用自定义对象扩展Sling绑定,因此它将在所有JSP文件中可用而无需额外的努力.我正在实现 BindingsValuesProvider OSGi service,就像这样(它不是一个真正的代码,但足够相似): @Component@Service
BindingsValuesProvider
OSGi service,就像这样(它不是一个真正的代码,但足够相似):
@Component @Service public class ContentBranchBindingProvider implements BindingsValuesProvider { @Override public void addBindings(Bindings bindings) { final Resource resource = (Resource) bindings.get("resource"); final String[] splitPath = StringUtils.split(resource.getPath(), '/'); bindings.put("contentBranch", splitPath[1]); } }
我希望contentBranch绑定在JSP中可用作脚本变量:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@include file="/libs/foundation/global.jsp"%> Your content branch is: ${contentBranch}
但是,上面的JSP不输出内容分支,但是:
Your content branch is:
我使用调试器来查看我的addBindings()方法被调用并将正确的值放入绑定映射中.如何在JSP中将其作为${contentBranch}提供?
Sling Bindings不会自动作为脚本变量使用.有 a plan to change it改变它,但在当前版本的Sling他们不是.Sling使用<sling:defineObjects/>
将自己的绑定复制到页面上下文,因此将它们作为脚本变量公开,但它不适用于contentBranch等自定义值.
但是,其中一个脚本变量由< sling:defineObjects />定义.是绑定,所以您可以像这样访问新值:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@include file="/libs/foundation/global.jsp"%> Your content branch is: ${bindings.contentBranch}
或者,考虑编写a custom defineObjects
标记.
此外,Sling绑定在Sightly中可用作脚本值,无需任何额外工作:
Your content branch is: ${contentBranch}