jsp - 如何添加自定义 Sling 绑定(bind)?

标签 jsp aem sling

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

相关文章:

aem - CQ QueryBuilder orderby 页面内组件顺序

aem - 如何创建系统用户 (rep :SystemUser) in AEM 6. 1?

java - JSTL forEach 从 arrayList 迭代的问题

java - AEM asset 有没有办法通过在java工作流中创建文件夹来移动文件

html - 如何使用脚本在 HTML 页面中显示带有换行符的字符串?

java - 我可以在 parsys 里面有一个 parsys 吗

aem - 如何从 AEM 中的 Sling POST 生成渲染输出?

jsp - 如何在 JSP 上设置用户的语言环境

java - Spring Security - 显示特定于登录用户的内容