HTML Java Use-API htl-java-use-api
Met de HTML Java Use-API kan een HTML-bestand toegang krijgen tot hulplijnmethoden in een aangepaste Java-klasse.
Hoofdletters gebruiken use-case
Met de HTML Java Use-API kan een HTML-bestand via data-sly-use
toegang krijgen tot hulplijnmethoden in een aangepaste Java-klasse. Met deze methode kunnen alle complexe bedrijfslogica worden ingekapseld in de Java-code, terwijl de HTML-code alleen betrekking heeft op directe opmaakproductie.
Een Java Use-API-object kan een eenvoudige POJO zijn, geïnstantieerd door een bepaalde implementatie via de standaardconstructor van de POJO.
Met de API-API-POJO's kunt u ook een openbare methode, init genoemd, met de volgende handtekening toegankelijk maken:
/**
* Initializes the Use bean.
*
* @param bindings All bindings available to the HTL scripts.
**/
public void init(javax.script.Bindings bindings);
De bindings
-kaart kan objecten bevatten die context bieden voor het momenteel uitgevoerde HTML-script dat het Use-API-object kan gebruiken voor de verwerking ervan.
Een eenvoudig voorbeeld a-simple-example
In dit voorbeeld wordt het gebruik van de Use-API geïllustreerd.
Begin met een HTML-component, info,
genoemd, die geen use-klasse heeft. Het bestaat uit één bestand, /apps/my-example/components/info.html
<div>
<h1>${properties.title}</h1>
<p>${properties.description}</p>
</div>
Voeg inhoud voor deze component toe die moet worden gerenderd bij /content/my-example/
:
{
"sling:resourceType": "my-example/component/info",
"title": "My Example",
"description": "This Is Some Example Content."
}
Wanneer deze inhoud wordt benaderd, wordt het HTML-bestand uitgevoerd. Binnen de HTML-code wordt het contextobject properties
gebruikt om de title
en description
van de huidige bron te openen en weer te geven. Het uitvoerbestand /content/my-example.html
is als volgt:
<div>
<h1>My Example</h1>
<p>This Is Some Example Content.</p>
</div>
Een Use-Class toevoegen adding-a-use-class
De info
-component in zijn huidige vorm heeft geen use-klasse nodig om zijn eenvoudige functie uit te voeren. Er zijn echter gevallen waarin u dingen moet doen die niet in HTML kunnen worden gedaan en dus een gebruiksklasse nodig hebt. Houd echter rekening met het volgende:
Stel dat u de component info
de eigenschappen title
en description
van de bron wilt laten weergeven, maar allemaal in kleine letters. Omdat HTML geen methode heeft voor het verlagen van tekenreeksen, kunt u een Java-gebruiksklasse toevoegen en /apps/my-example/component/info/info.html
als volgt wijzigen:
<div data-sly-use.info="Info">
<h1>${info.lowerCaseTitle}</h1>
<p>${info.lowerCaseDescription}</p>
</div>
Daarnaast wordt /apps/my-example/component/info/Info.java
gemaakt.
package apps.my_example.components.info;
import com.adobe.cq.sightly.WCMUsePojo;
public class Info extends WCMUsePojo {
private String lowerCaseTitle;
private String lowerCaseDescription;
@Override
public void activate() throws Exception {
lowerCaseTitle = getProperties().get("title", "").toLowerCase();
lowerCaseDescription = getProperties().get("description", "").toLowerCase();
}
public String getLowerCaseTitle() {
return lowerCaseTitle;
}
public String getLowerCaseDescription() {
return lowerCaseDescription;
}
}
Gelieve te zien de documenten van Java voor com.adobe.cq.sightly.WCMUsePojo
voor meer details.
Laten we nu eens kijken naar de verschillende delen van de code.
Lokale vs. Bundle Java Class local-vs-bundle-java-class
De Java-gebruiksklasse kan op twee manieren worden geïnstalleerd:
- Lokaal - in lokale installatie, wordt het brondossier van Java geplaatst naast het HTML- dossier, in de zelfde bewaarplaatsomslag. De bron wordt automatisch gecompileerd op bestelling. Er is geen afzonderlijke compilatie of verpakkingsstap vereist.
- Bundel - in een bundel installeert, moet de klasse van Java binnen een bundel worden gecompileerd en worden opgesteld OSGi gebruikend het standaard AEM plaatsingsmechanisme van de bundel (zie de sectie Gebundelde Klasse van Java).
Houd rekening met de volgende twee punten om te weten welke methode u moet gebruiken wanneer:
- A lokale Java gebruik-klasse wordt geadviseerd wanneer gebruik-klasse voor de component in kwestie specifiek is.
- A bundel Java gebruik-klasse wordt geadviseerd wanneer de code van Java een dienst uitvoert die van veelvoudige componenten HTML wordt betreden.
In dit voorbeeld wordt een lokale installatie gebruikt.
Java Package is Repository Path java-package-is-repository-path
Wanneer u een lokale installatie gebruikt, moet de pakketnaam van de use-klasse overeenkomen met de locatie van de opslagplaats. Onderstrepingstekens in de pakketnaam vervangen eventuele koppeltekens in het pad.
In dit geval bevindt Info.java
zich bij /apps/my-example/components/info
zodat het pakket apps.my_example.components.info
is:
package apps.my_example.components.info;
import com.adobe.cq.sightly.WCMUsePojo;
public class Info extends WCMUsePojo {
...
}
Uitbreiden WCMUsePojo
extending-wcmusepojo
Hoewel er verschillende manieren zijn om een Java-klasse op te nemen in HTML, is het eenvoudigst om de WCMUsePojo
-klasse uit te breiden. In dit voorbeeld /apps/my-example/component/info/Info.java
:
package apps.my_example.components.info;
import com.adobe.cq.sightly.WCMUsePojo;
public class Info extends WCMUsePojo
...
}
De klasse initialiseren initializing-the-class
Wanneer de use-class vanaf WCMUsePojo
wordt uitgebreid, wordt initialisatie uitgevoerd door de activate
-methode te overschrijven, in dit geval in /apps/my-example/component/info/Info.java
...
public class Info extends WCMUsePojo {
private String lowerCaseTitle;
private String lowerCaseDescription;
@Override
public void activate() throws Exception {
lowerCaseTitle = getProperties().get("title", "").toLowerCase();
lowerCaseDescription = getProperties().get("description", "").toLowerCase();
}
...
}
Context context
Typisch, activeert 🔗 methode wordt gebruikt om (in lidvariabelen) de waarden vooraf samen te stellen en op te slaan nodig in uw code HTML, die op de huidige context (het huidige verzoek en het middel, bijvoorbeeld) wordt gebaseerd.
De WCMUsePojo
klasse verleent toegang tot de zelfde reeks contextvoorwerpen zoals beschikbaar binnen een HTML- dossier (zie het document Globale Voorwerpen.)
In een klasse die WCMUsePojo
uitbreidt, kunt u tot contextvoorwerpen toegang hebben gebruikend hun namen:
<T> T get(String name, Class<T> type)
U kunt ook rechtstreeks toegang krijgen tot veelgebruikte contextobjecten met de in deze tabel vermelde handige methode.
Getter-methoden getter-methods
Nadat de use-class is geïnitialiseerd, wordt het HTML-bestand uitgevoerd. Tijdens dit stadium, trekt HTML typisch in de staat van diverse lidvariabelen van de use-klasse en geeft hen voor presentatie terug.
Als u vanuit het HTML-bestand toegang tot deze waarden wilt bieden, moet u aangepaste gettermethoden definiëren in de use-klasse volgens de volgende naamgevingsconventie:
- Een methode van het formulier
getXyz
maakt in het HTML-bestand bekend dat een objecteigenschapxyz
wordt genoemd.
In het volgende voorbeeldbestand /apps/my-example/component/info/Info.java
leiden de methoden getTitle
en getDescription
ertoe dat de objecteigenschappen title
en description
toegankelijk worden binnen de context van het HTML-bestand.
...
public class Info extends WCMUsePojo {
...
public String getLowerCaseTitle() {
return lowerCaseTitle;
}
public String getLowerCaseDescription() {
return lowerCaseDescription;
}
}
data-sly-use
Kenmerk data-sly-use-attribute
Het kenmerk data-sly-use
wordt gebruikt om de use-class in uw HTML-code te initialiseren. In het voorbeeld declareert het kenmerk data-sly-use
dat de klasse Info
wordt gebruikt. U kunt alleen de lokale naam van de klasse gebruiken omdat u een lokale installatie gebruikt (nadat u het Java-bronbestand in dezelfde map als het HTML-bestand hebt geplaatst). Als u een bundelinstallatie gebruikte, moet u de volledig gekwalificeerde klassenaam opgeven.
Let op het gebruik in dit /apps/my-example/component/info/info.html
voorbeeld.
<div data-sly-use.info="Info">
<h1>${info.lowerCaseTitle}</h1>
<p>${info.lowerCaseDescription}</p>
</div>
Lokale id local-identifier
De id info
(na de punt in data-sly-use.info
) wordt gebruikt in het HTML-bestand om de klasse te identificeren. Het bereik van deze id is globaal binnen het bestand, nadat deze is gedeclareerd. Het is niet beperkt tot het element dat de instructie data-sly-use
bevat.
Let op het gebruik in dit /apps/my-example/component/info/info.html
voorbeeld.
<div data-sly-use.info="Info">
<h1>${info.lowerCaseTitle}</h1>
<p>${info.lowerCaseDescription}</p>
</div>
Eigenschappen ophalen getting-properties
De id info
wordt vervolgens gebruikt om toegang te krijgen tot de objecteigenschappen title
en description
die via de methoden getter Info.getTitle
en Info.getDescription
werden weergegeven.
Let op het gebruik in dit /apps/my-example/component/info/info.html
voorbeeld.
<div data-sly-use.info="Info">
<h1>${info.lowerCaseTitle}</h1>
<p>${info.lowerCaseDescription}</p>
</div>
Uitvoer output
Wanneer /content/my-example.html
nu wordt benaderd, wordt het volgende /content/my-example.html
-bestand geretourneerd.
<div>
<h1>my example</h1>
<p>this is some example content.</p>
</div>
Buiten de basisbeginselen beyond-the-basics
Deze sectie introduceert enkele extra functies die verder gaan dan het eerder beschreven voorbeeld.
- Parameters doorgeven aan een use-klasse
- Java-gebruiksklasse gebundeld
Parameters doorgeven passing-parameters
Parameters kunnen bij initialisatie worden doorgegeven aan een use-klasse.
Voor details, gelieve te verwijzen naar de het Verdelen documentatie van de Motor van HTML Scripting.
Gebundelde Java-klasse bundled-java-class
Met een gebundelde gebruiks-klasse moet de klasse worden gecompileerd, worden verpakt, en in AEM worden opgesteld gebruikend het standaard OSGi mechanisme van de bundelplaatsing. In tegenstelling tot een lokale installatie, zou de use-class pakketverklaring normaal zoals in dit /apps/my-example/component/info/Info.java
voorbeeld moeten worden genoemd.
package org.example.app.components;
import com.adobe.cq.sightly.WCMUsePojo;
public class Info extends WCMUsePojo {
...
}
En de instructie data-sly-use
moet verwijzen naar de volledig gekwalificeerde klassenaam, in tegenstelling tot alleen de lokale klassenaam zoals in dit /apps/my-example/component/info/info.html
-voorbeeld.
<div data-sly-use.info="org.example.app.components.info.Info">
<h1>${info.title}</h1>
<p>${info.description}</p>
</div>