我想使用自定义对象扩展Sling绑定,因此无需额外的努力,即可在所有JSP文件中使用它。我正在像这样实现BindingsValuesProvider
OSGi服务(这不是实际的代码,但足够相似):
@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不会输出内容分支,而是:
您的内容分支为:
我使用调试器来查看addBindings()
调用了我的方法并将正确的值放入bindings
map中。我该怎么做才能像${contentBranch}
在JSP中一样可用?
吊索绑定不会自动用作脚本变量。有计划将其更改为更改它,但在当前版本的Sling中则没有。
Sling用于<sling:defineObjects/>
将其自身的绑定复制到页面上下文,因此将它们公开为脚本变量,但不适用于的自定义值contentBranch
。
但是,由定义的脚本变量之一<sling:defineObjects/>
是bindings
,因此您可以像这样访问新值:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@include file="/libs/foundation/global.jsp"%>
Your content branch is: ${bindings.contentBranch}
或者,考虑编写自定义defineObjects
标签。
此外,Sling绑定可以在Sightly中用作脚本值,而无需付出额外的努力:
Your content branch is: ${contentBranch}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句