我想用自定义对象扩展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}
        
             