我在我的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}
但我无法获得这个价值。有没有人知道怎么做?
答案 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>