我想用一个自定义对象扩展 Sling 绑定(bind),因此它可以在所有 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
绑定(bind)将在 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()
方法被调用并将适当的值放入 bindings
map 。我该怎么做才能使它成为 ${contentBranch}
在 JSP 中?
最佳答案
Sling 绑定(bind)不会自动用作脚本变量。有a plan to change it改变它,但在当前版本的 Sling 中它们不是。
吊索使用 <sling:defineObjects/>
将其自己的绑定(bind)复制到页面上下文并因此将它们公开为脚本变量,但它不适用于像 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}
或者,考虑写 a custom
defineObjects
标签。此外,Sling 绑定(bind)可用作 Sightly 中的脚本值。无需任何额外的努力:
Your content branch is: ${contentBranch}
关于jsp - 如何添加自定义 Sling 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823421/