最近,我正在使用Hybris,但无法理解组件的工作方式。
我知道如何创建和定义一个,如何将它们添加到我想要的页面中,等等。但是我不了解如何<cms: component>在jsp文件中使用标记。
<cms: component>
jsp
在AddToCartSlot产品详细信息页面的插槽中,我添加了更多组件。我试图像标准一样调用组件,并注释其内容。
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是所有组件都显示在页面上的唯一方法。
cms:pageSlot
AddToCart
现在,您将考虑“如果这些组件在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<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。