如何添加自定义 Sling 绑定?
How to add a custom Sling binding?
我想用自定义对象扩展 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()
方法被调用并将正确的值放入 bindings
映射中。我该怎么做才能在 JSP 中以 ${contentBranch}
的形式提供它?
Sling 绑定不会自动用作脚本变量。有 a plan to change it 可以更改它,但在当前版本的 Sling 中没有。
Sling 使用 <sling:defineObjects/>
将其自己的绑定复制到页面上下文,因此将它们公开为脚本变量,但它不适用于 contentBranch
.[=21= 等自定义值]
但是,<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 绑定可作为 Sightly 中的脚本值使用,无需任何额外工作:
Your content branch is: ${contentBranch}
我想用自定义对象扩展 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()
方法被调用并将正确的值放入 bindings
映射中。我该怎么做才能在 JSP 中以 ${contentBranch}
的形式提供它?
Sling 绑定不会自动用作脚本变量。有 a plan to change it 可以更改它,但在当前版本的 Sling 中没有。
Sling 使用 <sling:defineObjects/>
将其自己的绑定复制到页面上下文,因此将它们公开为脚本变量,但它不适用于 contentBranch
.[=21= 等自定义值]
但是,<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 绑定可作为 Sightly 中的脚本值使用,无需任何额外工作:
Your content branch is: ${contentBranch}