首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sightly中有requestScope变量吗?

Sightly中有requestScope变量吗?
EN

Stack Overflow用户
提问于 2014-08-22 00:08:03
回答 2查看 9.5K关注 0票数 7

在JSTL中,您可以在组件上设置变量,这些变量可用于同一请求中该组件之后的所有其他组件。在AEM中,是否有一种等效的方法在组件之间传递数据?

(我们正在查看的用例是,我们希望一个组件知道它是通过另一个组件包含的,而不是拖到parsys中)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 20:54:00

假设"requestScope“指的是request attributes,即限定在请求范围内的变量。

使用Sightly's Use-API可以很容易地设置请求属性。例如,这允许缓存检索成本较高且由同一请求的多个组件访问的对象。

Sightly有意使之变得复杂的是,在包含组件之前设置请求属性,并在包含组件之后立即删除它们,如下面的JSP示例所示:

代码语言:javascript
复制
<% request.setAttribute("myAttribute", someContextualInfo); %>
<cq:include path="innerComponent"/>
<% request.removeAttribute("myAttribute") %>

我们之所以不鼓励这样做,是因为它不是一个干净的模式:它基本上是使用全局变量作为资源之间通信的一种方式……全局变量并不是最佳实践,即使之后再次删除它们也是如此。

试着看看以下模式是否不能更好地满足你的需求:

选择器1.添加选择器

您可以将以点分隔的Sling selectors列表传递给包含的组件:

代码语言:javascript
复制
<div data-sly-resource="${'innerComponent' @ addSelectors='foo.bar'}"></div>

例如,myComponent组件可以包含foo.htmlbar.htmlfoo/bar.html模板,这些模板将呈现不同的选择器组合。但是,您也可以通过RequestPathInfo以编程方式访问选择器,从而根据选择器执行不同的操作。

selectors方法的好处是,您可以使用各种所需的选择器调用组件的内容节点,以选择所需节点的呈现形式:

代码语言:javascript
复制
http://localhost:4502/content/my/content/node.foo.bar.html

但是,关于这种方法需要注意的一件事是,如果您使用具有(理论上)无界值集的选择器,您将首先看到微妙的性能问题,然后最终耗尽脚本解析器缓存。选择器只能与(相对较小的)有界值集一起使用。

2.走上

如果您只想将上下文传递给一些依赖于包含它的父组件的组件,那么最好将问题颠倒过来,并在子组件上遍历父节点树并采取相应的操作。

例如,假设您想要基于使用它的父组件向listItem组件添加一个CSS类,以便将类似list-item-<parent-component-name>类的内容添加到listItem的格式副本中:

代码语言:javascript
复制
<li class="list-item list-item-user">User Name</li>

在JSP中,很容易像下面这样解决这个问题:

代码语言:javascript
复制
<% request.setAttribute("parentClassName", "user"); %>
<cq:include path="list-item"/>
<% request.removeAttribute("parentClassName") %>

但这实际上不是必需的,因为子组件可以检查它的父组件是什么,并自己确定parentClassName的适当值应该是什么。这样做的好处是该子组件可以被直接调用(例如,通过AJAX来更新用户列表),并且仍然可以正确呈现。

接口3.使用-

现在,如果以上两种模式不符合您的需要,那么您可能没有其他方法,只能使用请求属性。要这样做,you can follow the method described on that other answer。但要尽可能地限制这种做法。

票数 10
EN

Stack Overflow用户

发布于 2016-12-15 18:23:43

请求作用域变量从“Sightly 1.0.20”开始可用。这可能在AEM 6.3版之后可用。

但是,该捆绑包可以手动安装,因为它是开源的。我还没有测试过这个。

请参阅:https://issues.apache.org/jira/browse/SLING-5812

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25430981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档