2016-06-21 7 views
2

Kürzlich arbeite ich mit Hybris, und ich kann nicht verstehen, wie die Komponenten funktionieren.HYBRIS - Wie funktionieren Komponenten und Slots in der JSP-Datei?

Ich weiß, wie man eine erstellt und definiert, wie man sie zu der Seite, die ich will, usw. hinzufügen kann. Aber ich verstehe nicht, wie man das Tag <cms: component> in der Datei jsp verwendet.

Im Steckplatz AddToCartSlot von der Produktdetailseite habe ich weitere Komponenten hinzugefügt. Ich habe versucht, meine Komponente wie den Standard aufzurufen und seine Zeilen zu kommentieren.

Standardmäßig ist es die Komponente wie folgt genannt:

<cms:pageSlot position="AddToCart" var="component"> 
    <cms:component component="${component}" /> 
</cms:pageSlot> 

So wie auch ich versucht, meine Komponente zu nennen, aber nicht funktioniert:

<cms:pageSlot position="MyComponent" var="component"> 
    <cms:component component="${component}" /> 
</cms:pageSlot> 

meine Zeilen kommentiert und unkommentiert So Seine Linien und alle Komponenten werden auf der Seite angezeigt. Aber für mich ergibt das keinen Sinn, denn in der Position Attribut des Tags cms:pageSlot sollte die ID eines Steckplatzes und nicht die ID einer Komponente erhalten, um alle Komponenten Steckplatz anzuzeigen. Das Setzen der ID AddToCart anstelle von AddToCartSlot ist jedoch die einzige Möglichkeit, alle Komponenten auf der Seite anzuzeigen.

Jetzt werden Sie denken, was das Problem, wenn die Komponenten im Web angezeigt werden? Nun, das Problem ist, dass diese Komponenten nicht durch die Java-Controller, die ihnen entspricht (obwohl erstellt und deklariert in die com.myStore.storefront.controllers.ControllerConstants.java Datei). Außerdem würde ich gerne verstehen, warum es nicht richtig funktioniert.

Ich folgte den Schritten von Wki Hybris und ich fand, dass alles wie es ist zu einer anderen benutzerdefinierten Komponente deklariert wird, die ordnungsgemäß funktioniert. Ich kann keine Unterschiede finden und ich kann nicht verstehen, warum ich meinen Controller nicht überlasse oder warum das Tag nicht so funktioniert wie es mit der ID des Slots funktioniert, aber es funktioniert, wenn ich den Identifier einer Komponente verwende.

Wirklich, irgendwelche Ideen werden helfen.

Vielen Dank.

+0

Bitte fügen Sie alle Schritte hinzu, die Sie befolgt haben. Ich sehe nichts darüber, wie Sie ein Template, eine Seite, Slots, Slots für die Seite, ... erstellt haben. –

+0

Überprüfen Sie dies: https: //www.stackextend. com/hybris/alles-über-wcms-in-hybris/ –

Antwort

0

Dies ist, wie die Controller wie um aussehen sollten für Hybris, es zu benutzen:

@Controller("CustomCMSImageComponentController") 
@RequestMapping(value = ControllerConstants.CustomCMSImageComponent)// now the controller is mapped to "/view/CustomCMSImageComponentController" 
public class CustomCMSImageComponentController extends AbstractCMSComponentController<CustomCMSImageComponentModel> { 
    @Override 
    protected void fillModel(final HttpServletRequest request, final Model model, 
         final CustomCMSImageComponentModelcomponent) { 
    //here the spring Model(model method parameter) should be filled with what is needed to dynamically render in JSP 
    } 
} 

Die @Controller Annotation von Spring verwendet wird, um die CustomCMSImageComponentController zu instanziiert und diese Instanz hielt (Bohne) im Frühling Anwendungskontext.

Beim Rendern der CustomCMSImageComponent Hybris Suche nach der Bohne mit dem Namen „CustomCMSImageComponentController“ im Frühjahr Anwendungskontext, um den Controllers mit der Komponente gefunden und wenn es der DefaultCMSComponentController verwendet wird nichts finden.

0

Versuchen folgende Dinge:

  1. Sync Katalog. Möglicherweise haben Sie alles richtig, haben aber möglicherweise vergessen, den Katalog nach dem Hinzufügen der Komponenten zu synchronisieren. Dies ist vielleicht trivial, aber eine Überprüfung wert.
  2. Da Sie Ihre eigene Komponente erstellt, ich nehme an, Sie auch eine JSP für die Komponente erstellt (wenn es SimpleCMSComponent hat erstreckt)

    Verwenden Sie den Namen der Komponente jsp-Datei ohne das Wort component im var Attribute von CMS Seiten-Slot-Tag

    Wenn ich mein jsp Komponente Inhalt in einer Datei namens mycartcomponent.jsp hatte, dann würde ich es als

    verwenden

    Zum Beispiel

    <cms:pageSlot position="MyComponent" var="mycart"> 
        <cms:component component="${mycart}" /> 
    </cms:pageSlot> 
    
+0

Ist es besser, SimpeCMSComponent oder JSPIncludeComponent für eine einfache Komponente zu verwenden? – FelipeKunzler

+0

@FelipeKunzler Ich bin neu bei hybris, also kann ich deine Frage wirklich nicht beantworten, aber ich benutze SimpleCMSComponent seit einer Weile. – Abubakkar

1

Ich habe nicht eine Vorlage oder eine Seite erstellt oder Schlitz. Ich habe den benutzt, den Hybris in seinem Beispielladen bringt.Ich habe nur eine neue Komponente CustomCMSImageComponent wie eine Kopie von CMSImageComponent erstellt.

  1. Definieren Sie die neue Komponente auf Datei: mystorecore-items.xml

    <deployment table="CustomCMSImageComponent" typecode="20003"/> 
    </itemtype> 
    

  2. einen neuen Controller für diese Komponente erstellen CustomCMSImageComponentController.java und Blick customcmsimagecomponent.jsp

  3. angeben, dass 0.123.sollte der Controller zu dieser Komponente in ControllerConstants.java sein

    Zeichenfolge CustomCMSImageComponent = _Prefix + CustomCMSImageComponentModel._TYPECODE + _Suffix; // NOSONAR

  4. Erstellen Sie die Instanzen dieser Komponente in AddToCartSlot (in der entsprechenden Impex)

  5. Build-proyect, Server starten, initialisieren (HAC) und synchronisieren (HMC)

Gestern Ich habe herausgefunden, warum alle Komponenten angezeigt werden, wenn ich diesen Tag verwende: das ist der Name der Komponente im Slot und der Name des Slots auf der Seite. Diese Frage ist also gelöst.

Verwandte Themen