一尘不染

HYBRIS-JSP文件中的组件和插槽如何工作?

jsp

最近,我正在使用Hybris,但无法理解组件的工作方式。

我知道如何创建和定义一个,如何将它们添加到我想要的页面中,等等。但是我不了解如何<cms: component>jsp文件中使用标记。

AddToCartSlot产品详细信息页面的插槽中,我添加了更多组件。我试图像标准一样调用组件,并注释其内容。

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

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

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

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

因此,我的台词对他的台词进行了注释和取消注释,所有组件均显示在页面上。但是对我而言,这没有任何意义,因为在标签的position属性中,cms:pageSlot应该接收插槽的ID,而不是用来显示所有插槽的组件的ID。但是,用id
AddToCart代替AddToCartSlot是所有组件都显示在页面上的唯一方法。

现在,您将考虑“如果这些组件在Web上显示会出现什么问题?”,问题是这些组件没有经过与它们相对应的java控制器(尽管已在com.myStore.storefront.controllers.ControllerConstants.java文件中创建和声明)。此外,我想了解为什么它无法正常工作。

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

确实,任何想法都会有所帮助。

非常感谢你。


阅读 325

收藏
2020-06-08

共1个答案

一尘不染

这是控制器的外观,以便Hybris使用它:

@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
    }
}

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

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

2020-06-08