2017-10-10 90 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>