最近我和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>
所以我的线路评论并取消注释了他的线条,所有组件都显示在页面上。
但对我来说这没有任何意义,因为在标签cms:pageSlot
的position属性中应该收到一个槽的id而不是一个组件的id来显示所有组件槽。但是,将标识AddToCart
而不是AddToCartSlot
放在页面上显示所有组件的唯一方法。
现在你会想到如果组件在网络上显示会出现什么问题?&#39;好吧,问题是这些组件没有通过与它们对应的java控制器(尽管正在com.myStore.storefront.controllers.ControllerConstants.java
文件中创建和声明。另外,我想了解为什么它不能正常工作。
我按照Wki Hybris的步骤进行操作,我发现所有内容都被声明为另一个正常工作的自定义组件。我找不到差异,我无法理解为什么不通过我的控制器或为什么标签不能像插槽的ID一样工作,但它&#34;工作&#34;当我使用组件的标识符时。
真的,任何想法都会有所帮助。
非常感谢。
答案 0 :(得分:1)
我还没有创建模板或页面或插槽。我使用了Hybris在他的示例商店带来的那个。我只创建了一个新组件CustomCMSImageComponent
,就像CMSImageComponent
中的副本一样。
在文件中定义新组件:mystorecore-items.xml
<deployment table="CustomCMSImageComponent" typecode="20003"/>
</itemtype>
为此组件CustomCMSImageComponentController.java
和视图customcmsimagecomponent.jsp
在CustomCMSImageComponentController.java
ControllerConstants.java
应该是此组件的控制者
String CustomCMSImageComponent = _Prefix + CustomCMSImageComponentModel._TYPECODE + _Suffix; // NOSONAR
在AddToCartSlot
中创建此组件的实例(在相应的impex中)
构建项目,启动服务器,初始化(HAC)和同步(HMC)
昨天我发现为什么在使用这个标签时显示所有组件:实际上这是插槽中的组件名称和页面中的插槽名称。所以这个问题就解决了。
答案 1 :(得分: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)保留在 春季申请背景。
渲染CustomCMSImageComponent时,Hybris在Spring应用程序上下文中搜索名为“CustomCMSImageComponentController”的bean后,以便 找到与组件关联的Controller,如果找不到任何东西,将使用DefaultCMSComponentController。
答案 2 :(得分:0)
尝试以下事项:
由于您创建了自己的组件,我假设您也为组件创建了一个JSP(如果它正在扩展SimpleCMSComponent)
使用组件jsp文件的名称,但不包括CMS页面标记标记的component
属性中的单词var
。
如果我将jsp组件内容放在名为mycartcomponent.jsp
的文件中,那么我会将其用作
例如,
<cms:pageSlot position="MyComponent" var="mycart">
<cms:component component="${mycart}" />
</cms:pageSlot>
答案 3 :(得分:0)
您应该始终在jsp页面中使用内容插槽名称来呈现组件(通过 insert_update ContentSlotName; 插入到impex中的内容插槽名称)