HYBRIS – 组件和插槽如何在JSP文件中工作?

最近我和Hybris一起工作,我无法理解这些组件是如何工作的。

我知道如何创建和定义一个,如何将它们添加到我想要的页面等等。但我不明白如何在jsp文件中使用标记

在产品详细信息页面的插槽AddToCartSlot ,我添加了更多组件。 我试着像标准一样调用我的组件并评论他的行。

默认情况下,它被称为组件,如下所示:

    

所以我也尝试调用我的组件,但不起作用:

    

所以我的线路评论并取消注释他的线条,所有组件都显示在页面上。 但对我来说这没有任何意义,因为在标签cms:pageSlot的position属性中cms:pageSlot应该收到一个槽的id而不是一个组件的id来显示所有组件槽。 但是,将ID为AddToCart而不是AddToCartSlot是在页面上显示所有组件的唯一方法。

现在你会想到“如果组件在Web上显示会出现什么问题?”,问题是这些组件没有通过与它们对应的java控制器(尽管在com.myStore.storefront.controllers.ControllerConstants.java创建并声明了com.myStore.storefront.controllers.ControllerConstants.java文件)。 另外,我想了解为什么它不能正常工作。

我按照Wki Hybris的步骤进行操作,我发现所有内容都被声明为另一个正常工作的自定义组件。 我找不到差异,我无法理解为什么不通过我的控制器或为什么标签不能像插槽的id那样工作,但是当我使用组件的标识符时它“有效”。

真的,任何想法都会有所帮助。

非常感谢你。

这就是控制器应该如何使Hybris使用它:

 @Controller("CustomCMSImageComponentController") @RequestMapping(value = ControllerConstants.CustomCMSImageComponent )// now the controller is mapped to "/view/CustomCMSImageComponentController" public class CustomCMSImageComponentController extends AbstractCMSComponentController { @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 } } 

Spring使用@Controller注释来实例化CustomCMSImageComponentController并将该实例(bean)保存在spring应用程序上下文中。

渲染CustomCMSImageComponent时,Hybris在spring应用程序上下文中搜索名为“CustomCMSImageComponentController”的bean之后,以便找到与该组件关联的Controller,如果找不到任何内容,则将使用DefaultCMSComponentController。

我还没有创建模板或页面或插槽。 我使用了Hybris带来的示例商店。 我只创建了一个新组件CustomCMSImageComponent就像CustomCMSImageComponent的副本CMSImageComponent

  1. 在文件中定义新组件: mystorecore-items.xml

        

  2. 为此组件CustomCMSImageComponentController.java和视图customcmsimagecomponent.jsp创建一个新控制器

  3. 指示CustomCMSImageComponentController.java应该是ControllerConstants.java中此组件的ControllerConstants.java

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

  4. AddToCartSlot创建此组件的实例(在相应的impex中)

  5. 构建proyect,启动服务器,初始化(HAC)和同步​​(HMC)

昨天我发现为什么在使用这个标签时显示所有组件:实际上这是插槽中组件的名称和页面中插槽的名称。 所以这个问题已经解决了。

尝试以下事项:

  1. 同步目录。 您可能拥有一切正确但可能忘记在添加组件后同步目录。 这可能是微不足道的,但值得一试。
  2. 由于您创建了自己的组件,我假设您也为组件创建了一个JSP(如果它正在扩展SimpleCMSComponent)

    使用组件jsp文件的名称,不包括CMS页面槽标记的var属性中的单词component

    如果我将jsp组件内容放在名为mycartcomponent.jsp的文件中,那么我会将其用作

    例如,