2016-12-01 9 views
1

私はSlingModelsを初めて使用しています。注釈はあまり明確ではありません。私は現在、AEM 6.2からSlingModelsを使う代わりに基本的な基礎コンポーネントを変換しようとしています。SlingModels:リソースから適応するときにSlingHttpServletRequestを挿入できますか?

イメージコンポーネントの場合、Foundation JSPはSlingHttpServletRequestを使用してImageDoctypeを設定します。だから私は次のように試した:

@Model(adaptables = {Resource.class}) 
public class ImageModel { 
    @SlingObject 
    private SlingHttpServletRequest request; 

    @SlingObject 
    private Resource resource; 
} 

しかし、これでrequestはnullです。だから私は使用してに切り替え:reuqestresource

JSPコードのために機能するようになりました

@Model(adaptables = {SlingHttpServletRequest.class}) 

<sling:adaptTo adaptable="${slingRequest}" adaptTo="models.ImageModel" var="m"/> 

が、これはそれを行うための正しい方法ですかから適応させる方法がありますresourceはまだrequestを注射することができますか?

答えて

3

リソースはSlingHttpServletRequestに対応していないため、これを行うことはできません。モデルでRequestが必要な場合は、Requestから適応可能にします。

これを行うライブラリがありました。それは、現在のリクエストをThreadLocalに格納してからそれから読み取るためにFilterを使用しましたが、私はこのアプローチを推奨しません。 ThreadLocalはもう一つのグローバルです。

0
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) 
public class ImageModel { 
    @Self 
    private Resource resource; 

    @SlingObject 
    private ResourceResolver resourceResolver; 

    @SlingObject 
    SlingHttpServletRequest slingRequest; 
} 
関連する問題