如何在Sightly / HTL中检索会话值?

时间:2017-10-10 12:26:20

标签: aem sightly htl

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

${request.session.attribute @ mySessionAttribute}

${currentSession.attribute @ mySessionAttribute}

但我无法获得这个价值。有没有人知道怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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>