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. Hierdoor kunnen alle complexe bedrijfslogica worden ingekapseld in de code van Java, terwijl de code HTML slechts op directe prijsverhogingsproductie behandelt.
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 aan 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.
We beginnen met een HTML-component, info
genaamd, 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>
Er wordt ook inhoud voor deze component toegevoegd 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 gebruiken we het contextobject properties
om de title
en description
van de huidige bron te openen en weer te geven. Het uitvoerbestand /content/my-example.html
is:
<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. Aangezien HTML geen methode voor het verlagen van tekenreeksen heeft, hebt u een use-klasse nodig. U kunt dit doen door een Java-gebruiksklasse toe te voegen en /apps/my-example/component/info/info.html
als volgt te wijzigen:
<div data-sly-use.info="Info">
<h1>${info.lowerCaseTitle}</h1>
<p>${info.lowerCaseDescription}</p>
</div>
Daarnaast maken we /apps/my-example/component/info/Info.java
.
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 JavaDocs voor com.adobe.cq.sightly.WCMUsePojo
voor meer details.
Laten we nu door de verschillende delen van de code lopen.
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 een lokale installatie wordt gebruikt, moet de pakketnaam van de use-klasse overeenkomen met die van de opslagplaats, waarbij eventuele koppeltekens in het pad worden vervangen door onderstrepingstekens in de pakketnaam.
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 een aantal manieren zijn om een klasse van Java met HTML (zie de sectie Alternatieven aan WCMUsePojo
) op te nemen, is het eenvoudigst om de WCMUsePojo
klasse uit te breiden. Voor ons 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, kunnen contextobjecten met de naam worden benaderd
<T> T get(String name, Class<T> type)
U kunt ook veelgebruikte contextobjecten rechtstreeks benaderen met de toepasselijke gebruiksmethode die in deze tabel wordt vermeld.
Getter-methoden getter-methods
Nadat de use-class is geïnitialiseerd, wordt het HTML-bestand uitgevoerd. Tijdens dit stadium zal HTML typisch in de staat van diverse lidvariabelen van de use-klasse trekken en hen voor presentatie teruggeven.
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 een objecteigenschap met de naamxyz
zichtbaar.
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-smart-use Attribute data-sly-use-attribute
Het kenmerk data-sly-use
wordt gebruikt om de use-class in uw HTML-code te initialiseren. In ons voorbeeld declareert het kenmerk data-sly-use
dat we de klasse Info
willen gebruiken. We kunnen alleen de lokale naam van de klasse gebruiken, omdat we een lokale installatie gebruiken (als u het Java-bronbestand in dezelfde map als het HTML-bestand hebt geplaatst). Als we een bundel zouden installeren, zouden we de volledig gekwalificeerde klassenaam moeten 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 we nu toegang krijgen tot /content/my-example.html
, 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
In deze sectie worden enkele andere functies geïntroduceerd die verder gaan dan het eenvoudige voorbeeld dat eerder is beschreven.
- 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 Scripting HTML.
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>