2017-10-10 87 views
-1

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

${request.session.attribute @ mySessionAttribute} 

${currentSession.attribute @ mySessionAttribute} 

,但我没能获得该值。有没有人知道如何去做?

+0

这仅通过HTL是不可能的,你需要创造一个Java/JS使用类或最好是一个吊带模型(易于通过快速谷歌搜索实现样本)另外,请阅读HTL规范https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/master/SPECIFICATION。 MD –

回答

0

在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) }; });

0

您不能将参数传递给HTL中的方法,因此我不会推荐这样做。要解决这个问题

一种方法是使用吊带型号:

@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>