2017-10-10 4 views
-1

私はAEMプロジェクト(AEMバージョン6.3)のテンプレート言語としてSightly/HTLを使用しています。 Sightlyは多くのコンテキストオブジェクトを提供しています.2つは、org.apache.sling.api.SlingHttpServletRequestとjavax.servlet.http.HttpSessionでサポートされているcurrentSessionの2つのリクエストです。セッションパラメータの値にアクセスしようとしています。Sightly/HTLでセッション値を取得する方法は?

${request.session.attribute @ mySessionAttribute} 

または

${currentSession.attribute @ mySessionAttribute} 

が、その値を取得することはできませんよ:以下のようなものを実行してファイル。それをどうやって行うのか誰も考えていますか?

+0

、あなたは、java/JSをクリートする必要がありますクラスを使用するか、スリングモデルを使用するのが簡単です(簡単なGoogle検索のサンプルを簡単に実装できます)。また、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のメソッドに引数を渡すことはできません。とにかくこれを行うことはお勧めしません。

この問題を解決する1つの方法は、スリングモデルを使用することです:

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

    @ScriptVariable 
    private Session currentSession; 

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

HTL:これはHTLを介して可能ではありません

<div data-sly-use.sessionModel="com.mypackage.SessionModel"> 
    ${sessionModel.mySessionAttribute} 
</div> 
関連する問題