-1

我在我的 AEM 项目(AEM 版本 6.3)中使用 Sightly/HTL 作为模板语言。由于 Sightly 提供了很多上下文对象,其中两个是:由 org.apache.sling.api.SlingHttpServletRequest 支持的请求和由 javax.servlet.http.HttpSession 支持的 currentSession,我试图在我的视线中访问一些会话参数值通过执行以下操作来文件:

${request.session.attribute @ mySessionAttribute}

或者

${currentSession.attribute @ mySessionAttribute}

但我无法获得该价值。有人知道怎么做吗?

4

2 回答 2

1

在 HTL/Sightly 中,您不能使用参数调用任意方法,这是设计上的限制。由于javax.servlet.http.HttpSessionAPI 不会将属性公开为地图,因此您无法访问它们,${currentSession.attributes['mySessionAttribute']}因此您需要对其进行创新:

脚本.html <sly data-sly-use.attr="${'attrib.js' @ session=currentSession, name='mySessionAttribute'}">${attr.value}</sly>

属性.js use(function () { return { value: this.session.getAttribute(this.name) }; });

于 2017-10-10T12:46:51.153 回答
1

您不能像这样将参数传递给 HTL 中的方法,我也不建议这样做。

解决此问题的一种方法是使用 Sling 模型:

@Model(adaptables = SlingHttpServletRequest.class)
public SessionModel {

    @ScriptVariable
    private Session currentSession;

    public String getMySessionAttribute() {
        return this.currentSession.getAttribute("attributeName");
    }
}

HTL:

<div data-sly-use.sessionModel="com.mypackage.SessionModel">
    ${sessionModel.mySessionAttribute}
</div>
于 2017-10-10T12:50:35.463 回答