Använda Sling-adaptrar
- Ämnen:
- Developing
Skapat för:
- Developer
Sling erbjuder Adaptermönster att enkelt översätta objekt som implementerar Adaptiv gränssnitt. Det här gränssnittet innehåller en allmän customiTo() metod som översätter objektet till den klasstyp som skickas som argument.
Om du till exempel vill översätta ett Resource-objekt till motsvarande Node-objekt kan du bara göra följande:
Node node = resource.adaptTo(Node.class);
Användningsexempel
Det finns följande användningsområden:
-
Få implementeringsspecifika objekt.
En JCR-baserad implementering av den generiska
Resource
-gränssnittet ger åtkomst till underliggande JCRNode
. -
Skapa genvägar för objekt som kräver att interna kontextobjekt skickas.
Till exempel den JCR-baserade
ResourceResolver
innehåller en referens till begäranJCR Session
som i sin tur behövs för många objekt som ska fungera baserat på den begärandesessionen, somPageManager
ellerUserManager
. -
Genväg till tjänster.
Ett sällsynt fall -
sling.getService()
är också enkelt.
Null-returvärde
adaptTo()
kan returnera null.
Det finns olika orsaker till detta, bland annat:
- implementeringen saknar stöd för måltypen
- en adapterfabrik som hanterar det här ärendet är inte aktivt (t.ex. på grund av saknad tjänstreferens)
- internt villkor misslyckades
- tjänsten är inte tillgänglig
Det är viktigt att du hanterar skiftläget null på ett smidigt sätt. Vid jsp-återgivning kan det vara acceptabelt att jsp misslyckas om det resulterar i en tom del av innehållet.
Cachelagring
För att förbättra prestanda kan implementeringar cachelagra objektet som returneras från en obj.adaptTo()
ring. Om obj
är samma, returnerade objekt är samma.
Denna cachelagring utförs för alla AdapterFactory
baserade fall.
Det finns dock ingen allmän regel - objektet kan vara antingen en ny eller en befintlig instans. Det innebär att du inte kan förlita dig på något av beteendena. Därför är det viktigt, särskilt inom AdapterFactory
att objekt kan återanvändas i det här scenariot.
Så här fungerar det
Det finns olika sätt att Adaptable.adaptTo()
kan implementeras:
-
själva objektet, implementera själva metoden och mappa till vissa objekt.
-
Av en
AdapterFactory
, som kan mappa godtyckliga objekt.Objekten måste fortfarande implementera
Adaptable
gränssnitt och måste utökaSlingAdaptable
(som klararadaptTo
till en central adapterhanterare).Det gör att du kan lägga in kopplingar i
adaptTo
mekanism för befintliga klasser, somResource
. -
En kombination av båda.
I det första fallet kan javadocs visa vad adaptTo-targets
är möjliga. Detta är dock ofta inte möjligt för vissa underklasser, t.ex. JCR-baserade resurser. I det senare fallet ska AdapterFactory
är vanligtvis en del av de privata klasserna i ett paket och därför inte exponeras i ett klient-API, och inte heller listas i javadocs. Teoretiskt sett skulle det vara möjligt att få tillgång till alla AdapterFactory
implementeringar från OSGi runtime-modulen för tjänster och se hur deras"adaptable"-konfigurationer (källor och mål) ser ut, men inte för att mappa dem till varandra. I slutändan beror detta på den interna logiken, som måste dokumenteras. Denna referens.
Referens
Sling
Resurs anpassar sig till:
Nod | Om detta är en JCR-nodbaserad resurs eller en JCR-egenskap som refererar till en nod. |
Egenskap | Om detta är en JCR-egenskapsbaserad resurs. |
Objekt | Om detta är en JCR-baserad resurs (nod eller egenskap). |
Karta | Returnerar en karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller annan resurs som stöder värdekartor). |
ValueMap | Returnerar en användbar karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller annan resurs som stöder värdekartor). Kan också uppnås (enklare) genom att användaResourceUtil.getValueMap(Resource) (hanterar gemener, etc.). |
ArvValueMap | Utökning av ValueMap som gör det möjligt att ta hänsyn till resurshierarkin när du söker efter egenskaper. |
PersistableValueMap | Om detta är en JCR-nodbaserad resurs och användaren har behörighet att ändra egenskaper på den noden. Obs! flera beständiga kartor delar inte sina värden. |
InputStream | Returnerar det binära innehållet i en "fil"nt:resource |
AuthorizableResourceProvider``org.apache.sling.jackrabbit.usermanager``/system/userManager | |
cq:Page``cq:PseudoPage | |
cq:Component | |
cq:Page | |
cq:Template | |
cq:Page | |
cq:Tag | |
cq:Preferences | |
cq:ContentSyncConfig | |
cq:ContentSyncConfig |
ResursResolver anpassar sig till:
Session | JCR-sessionen för begäran, om det här är en JCR-baserad resurslösare (standard). |
PageManager | |
ComponentManager | |
Designer | |
AssetManager | Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare. |
TagManager | Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare. |
UserManager | Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare och om användaren har behörighet att komma åt UserManager. |
Auktoriserbar | Den aktuella användaren. |
Användare | Den aktuella användaren. |
PrivilegeManager | |
Inställningar | Inställningar för den aktuella användaren (baserat på JCR-session om detta är en JCR-baserad resurslösare). |
PreferencesService | |
PinManager | |
QueryBuilder | |
Externalizer | För att göra absoluta URL:er externaliserade, även med objektet request. |
SlingHttpServletRequest anpassar sig till:
Inga mål ännu, men implementerar Adaptable och kan användas som källa i en anpassad AdapterFactory.
SlingHttpServletResponse anpassar sig till:
ContentHandler (XML) | Om det här är ett svarsalternativ. |
WCM
Sida anpassar sig till:
Resurs | Sidans resurs. |
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Sidans nod. |
... | Allt som sidans resurs kan anpassas till. |
Komponent anpassar sig till:
Resurs | Komponentens resurs. |
---|---|
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Komponentens nod. |
… | Allt som komponentens resurs kan anpassas till. |
Mall anpassar sig till:
Resurs | Mallens resurs. |
EtiketteradResurs | Etiketterad resurs (== this). |
Nod | Nod för den här mallen. |
... | Allt som mallens resurs kan anpassas till. |
Dokumentskydd
Auktoriserbar, Användare och Grupp anpassa till:
Nod | Returnerar hemnoden för användaren/gruppen. |
---|---|
ReplicationStatus | Returnerar replikeringsstatusen för användarens/gruppens hemnod. |
DAM
Tillgång anpassar sig till:
Taggar
Tagg anpassar sig till:
Övriga
Dessutom ger Sling/JCR/OCM [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
för anpassad OCM (Mappning av objektinnehåll).
Experience Manager
- Utveckla användarhandboken - översikt
- Introduktion för utvecklare
- Komma igång med utveckling i AEM Sites – WKND-självstudiekurs
- AEM kärnbegrepp
- Struktur för det AEM användargränssnittet med pekskärm
- Koncepten i det AEM användargränssnittet med pekskärm
- AEM - riktlinjer och bästa praxis
- Använda bibliotek på klientsidan
- Developing and Page Diff
- Begränsningar för redigerare
- CSRF Protection Framework
- Datamodellering - David Nueschelers modell
- Bidrar till AEM
- Dokumentskydd
- Referensmaterial
- Skapa en webbplats med alla funktioner (Classic UI)
- Designer och Designer (Classic UI)
- Plattform
- Fusklapp för Sling
- Använda Sling-adaptrar
- Taggbibliotek
- Mallar
- Använda Sling Resource Merger i AEM
- Övertäckningar
- Namnkonventioner
- Skapa en ny GRE-fältkomponent
- Query Builder
- Taggar
- Anpassa sidor som visas av felhanteraren
- Anpassade nodtyper
- Lägga till teckensnitt för grafikåtergivning
- Ansluta till SQL-databaser
- Extern URL
- Skapa och använda jobb för avlastning
- Konfigurerar cookie-användning
- Så här programmässigt kommer du åt AEM JCR
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utveckla rapporter
- eCommerce
- Komponenter
- Kärnkomponenter
- Formatsystem
- Komponenter - översikt
- AEM - Grunderna
- Utveckla AEM
- Utveckla AEM - kodexempel
- JSON-exporterare för innehållstjänster
- Aktivera JSON-export för en komponent
- Bildredigeraren
- Dekoration-tagg
- Använda Dölj villkor
- Konfigurera flera redigerare på plats
- Utvecklarläge
- Testa användargränssnittet
- Komponenter för innehållsfragment
- Hämta sidinformation i JSON-format
- Internationalisering
- Klassiska gränssnittskomponenter
- Headless Experience Management
- Headless och Hybrid with AEM
- Aktivera JSON-export för en komponent
- Enkelsidiga program
- SPA introduktion och genomgång
- SPA WKND - självstudiekurs
- Getting Started with SPA in AEM - React
- Komma igång med SPA i AEM - Angular
- Implementera en React Component for SPA
- SPA djupdykning
- SPA
- Utveckla SPA för AEM
- SPA Blueprint
- SPA
- Dynamisk mappning av modell till komponent för SPA
- SPA
- SPA och Adobe Experience Platform Launch Integration
- SPA- och serveråtergivning
- SPA referensmaterial
- HTTP-API
- Innehållsfragment
- Experience Fragments
- Utvecklingsverktyg
- Utvecklingsverktyg
- AEM Modernization Tools
- Dialogruteredigeraren
- Verktyget Dialogkonvertering
- Utveckla med CRXDE Lite
- Hantera paket med Maven
- Utveckla AEM projekt med Eclipse
- Skapa AEM projekt med Apache Maven
- Utveckla AEM projekt med IntelliJ IDEA
- Så här använder du VLT-verktyget
- Så här använder du proxyserververktyget
- AEM Brackets Extension
- AEM Developer Tools for Eclipse
- AEM
- Personanpassning
- Utöka AEM
- Anpassa sidredigering
- Anpassa konsolerna
- Anpassa vyer av Sidegenskaper
- Konfigurera din sida för gruppredigering av sidegenskaper
- Anpassa och utöka Content Fragments
- Utöka arbetsflöden
- Utöka Multi Site Manager
- Spårning och analys
- Cloud Services
- Skapa anpassade tillägg
- Forms
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utöka Classic UI
- Testning
- Bästa praxis
- Mobil webb