当前位置 : 主页 > 编程语言 > java >

jsp – 如何添加自定义Sling绑定?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我想用自定义对象扩展Sling绑定,因此它将在所有JSP文件中可用而无需额外的努力.我正在实现 BindingsValuesProvider OSGi service,就像这样(它不是一个真正的代码,但足够相似): @Component@Service
我想用自定义对象扩展Sling绑定,因此它将在所有JSP文件中可用而无需额外的努力.我正在实现 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}
网友评论