Sling-modellen parametereren op basis van HTML
Adobe Experience Manager (AEM) biedt een robuust raamwerk voor het bouwen van dynamische en aanpasbare webtoepassingen. Een van de krachtige functies is de mogelijkheid om de parameters van Sling Models te bepalen, waardoor de flexibiliteit en herbruikbaarheid van deze modellen worden verbeterd. Deze zelfstudie begeleidt u bij het maken van een geparametriseerd Sling-model en het gebruik ervan in HTML (HTML Template Language) voor het renderen van dynamische inhoud.
HTML-script
In dit voorbeeld verzendt het HTML-script twee parameters naar het ParameterizedModel
Sling Model. Het model manipuleert deze parameters in zijn getValue()
methode en keert het resultaat voor vertoning terug.
Dit voorbeeld gaat twee parameters van het Koord over, nochtans kunt u om het even welk type van waarde of voorwerp tot het het Schuiven Model overgaan, zolang het Verschuivende Model gebiedstype, dat met @RequestAttribute
wordt geannoteerd het type van voorwerp of waarde aanpast die van HTML wordt overgegaan.
<sly data-sly-use.myModel="${'com.example.core.models.ParameterizedModel' @ myParameterOne='Hello', myParameterTwo='World'}"
data-sly-test.isReady="${myModel.isReady()}">
<p>
${myModel.value}
</p>
</sly>
<sly data-sly-use.placeholderTemplate="core/wcm/components/commons/v1/templates.html"
data-sly-call="${placeholderTemplate.placeholder @ isEmpty=!isReady}">
</sly>
- Parameterization: de
data-sly-use
verklaring leidt tot een geval vanParameterizedModel
metmyParameterOne
enmyParameterTwo
. - Voorwaardelijke Rendering:
data-sly-test
controleert of het model klaar alvorens inhoud te tonen is. - Placeholder Vraag: de
placeholderTemplate
handvatten gevallen waar het model niet klaar is.
Implementatie verkoopmodel
Hieronder wordt beschreven hoe u het Sling-model implementeert:
package com.example.core.models.impl;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.osgi.service.component.annotations.Model;
import org.osgi.service.component.annotations.RequestAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Model(
adaptables = { SlingHttpServletRequest.class },
adapters = { ParameterizedModel.class }
)
public class ParameterizedModelImpl implements ParameterizedModel {
private static final Logger log = LoggerFactory.getLogger(ParameterizedModelImpl.class);
// Use the @RequestAttribute annotation to inject the parameter set in the HTL.
// Note that the Sling Model field can be any type, but must match the type of object or value passed from HTL.
@RequestAttribute
private String myParameterOne;
// If the HTL parameter name is different from the Sling Model field name, use the name attribute to specify the HTL parameter name
@RequestAttribute(name = "myParameterTwo")
private String mySecondParameter;
// Do some work with the parameter values
@Override
public String getValue() {
return myParameterOne + " " + mySecondParameter + ", from the parameterized Sling Model!";
}
@Override
public boolean isReady() {
return StringUtils.isNotBlank(myParameterOne) && StringUtils.isNotBlank(mySecondParameter);
}
}
- ModelAnnotatie: de
@Model
annotatie wijst deze klasse als het Verschuiven Model aan, aanpasbaar vanSlingHttpServletRequest
en het uitvoeren van deParameterizedModel
interface. - Attributen van het Verzoek: de
@RequestAttribute
annotatie injecteert parameters HTML in het model. - Methoden:
getValue()
voegt de parameters samen, enisReady()
controleert dat de parameters niet leeg zijn.
De interface ParameterizedModel
wordt als volgt gedefinieerd:
package com.example.core.models;
import org.osgi.annotation.versioning.ConsumerType;
@ConsumerType
public interface ParameterizedModel {
/**
* Get an example string value from the model. This value is the concatenation of the two parameters.
*
* @return the value of the model
*/
String getValue();
/**
* Check if the model is ready to be used.
*
* @return {@code true} if the model is ready, {@code false} otherwise
*/
boolean isReady();
}
Voorbeeld-uitvoer
Met de parameters "Hello"
en "World"
genereert het HTML-script de volgende uitvoer:
<p>
Hello World, from the parameterized Sling Model!
</p>
Dit toont aan hoe geparameterized Verzamelmodellen in AEM kunnen worden beïnvloed gebaseerd op inputparameters die via HTML worden verstrekt.