Lägga till en användningsklass

Komponenten info som den ser ut behöver ingen use-klass för att utföra sin enkla funktion. Det finns fall där du behöver göra saker som inte kan göras i HTML och där du behöver en användningsklass. Tänk på följande:

OBSERVERA
En use-klass ska bara användas när något inte kan göras i enbart HTML.

Anta till exempel att du vill att komponenten info ska visa egenskaperna title och description för resursen, men alla med gemener. Eftersom HTML inte har någon metod för att sänka radering av strängar kan du lägga till en Java-användarklass och ändra /apps/my-example/component/info/info.html enligt följande:

<div data-sly-use.info="Info">
    <h1>${info.lowerCaseTitle}</h1>
    <p>${info.lowerCaseDescription}</p>
</div>

Dessutom skapas /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;
    }
}

Mer information finns i Java-dokumenten för com.adobe.cq.sightly.WCMUsePojo.

Nu ska vi titta på de olika delarna av koden.

Java-klass, lokal kontra bunt

Java-klassen kan installeras på två sätt:

  • Lokal - I en lokal installation placeras Java-källfilen bredvid HTML-filen i samma databasmapp. Källan kompileras automatiskt vid behov. Inget separat kompilerings- eller paketeringssteg krävs.
  • Paket - I en paketinstallation måste Java-klassen kompileras och distribueras i ett OSGi-paket med AEM standardmetod för paketdistribution (se avsnittet Paketerad Java-klass).

Om du vill veta vilken metod du ska använda när bör du tänka på följande två saker:

  • En lokal Java use-class rekommenderas när use-klassen är specifik för den aktuella komponenten.
  • En Java-användarklass som ingår i paketet rekommenderas när Java-koden implementerar en tjänst som är tillgänglig från flera HTML-komponenter.

I det här exemplet används en lokal installation.

Java-paketet är en databassökväg

När du använder en lokal installation måste paketnamnet för use-klassen matcha databasmappens plats. Understreck i paketnamnet ersätter eventuella bindestreck i sökvägen.

I det här fallet finns Info.java/apps/my-example/components/info så paketet är apps.my_example.components.info:

package apps.my_example.components.info;

import com.adobe.cq.sightly.WCMUsePojo;

public class Info extends WCMUsePojo {

   ...

}
OBSERVERA
Du bör använda bindestreck i namn på databasobjekt när du utvecklar AEM. Däremot är bindestreck ogiltiga i Java-paketnamn. Därför måste alla bindestreck i databassökvägen konverteras till understreck i paketnamnet.