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
。
-
在文件中定义新组件:
mystorecore-items.xml
-
为此组件
CustomCMSImageComponentController.java
和视图customcmsimagecomponent.jsp
创建一个新控制器 -
指示
CustomCMSImageComponentController.java
应该是ControllerConstants.java中此组件的ControllerConstants.java
String CustomCMSImageComponent = _Prefix + CustomCMSImageComponentModel._TYPECODE + _Suffix; // NOSONAR
-
在
AddToCartSlot
创建此组件的实例(在相应的impex中) -
构建proyect,启动服务器,初始化(HAC)和同步(HMC)
昨天我发现为什么在使用这个标签时显示所有组件:实际上这是插槽中组件的名称和页面中插槽的名称。 所以这个问题已经解决了。
尝试以下事项:
- 同步目录。 您可能拥有一切正确但可能忘记在添加组件后同步目录。 这可能是微不足道的,但值得一试。
-
由于您创建了自己的组件,我假设您也为组件创建了一个JSP(如果它正在扩展SimpleCMSComponent)
使用组件jsp文件的名称,不包括CMS页面槽标记的
var
属性中的单词component
。如果我将jsp组件内容放在名为
mycartcomponent.jsp
的文件中,那么我会将其用作例如,