【问题标题】:Hybris: How to pass class as a parameter to cms:component?Hybris:如何将类作为参数传递给 cms:component?
【发布时间】:2020-05-11 05:38:06
【问题描述】:

我已经开始学习 Hybris,我想了解如何将类作为参数传递给自定义 CMS 组件(用于组件的根元素)。

假设在一个名为 customNavigationComponent.jsp 的 jsp 文件中,我有这段代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="cms" uri="http://hybris.com/tld/cmstags"%>

<c:forEach items="${navigation.entries}" var="navigationLink">
    <div class="custom-component-wrapper">
        <cms:component component="${navigationLink.item}"/>
    </div>
</c:forEach>

自定义组件如下所示:

<a href="${component.url}">
    <div>${component.linkText}</div>
</a>

我想了解将navigation-link 类作为参数传递需要做什么,如下所示:

<cms:component component="${navigationLink.item}" class="navigation-link"/>

这样渲染的结果将类似于:

<a href="stackoverflow.com" class="navigation-link">
    <div>Lorem Ipsum</div>
</a>

【问题讨论】:

    标签: java html jsp hybris


    【解决方案1】:

    cms:component 中没有调用属性class,因此以下语句将不起作用:

    <cms:component component="${navigationLink.item}" class="navigation-link"/>
    

    请查看https://help.sap.com/doc/a4265d5ea8314eb2929e6cf6fb8e35a5/1811/en-US/de/hybris/platform/cms2lib/cmstags/CMSComponentTag.html

    为了更好的理解,可以和c:forEach比较一下。在https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/forEach.html,您将找到c:forEach 可用的属性列表,如果您想深入了解,可以进一步查看https://tomcat.apache.org/taglibs/standard/apidocs/javax/servlet/jsp/jstl/core/LoopTagSupport.html

    如果你想使用你的语句,你需要创建一个自定义标签。

    【讨论】:

    • 感谢您的回答阿文德!我尝试添加: element="div" 作为 的参数,如下所示: 并将我的自定义组件的内容包装在
      中,并带有类“navigation-link”。有什么方法可以直接调整组件渲染逻辑吗?如果我设法找到渲染器类,我可以尝试修改/扩展它,以便将类直接添加到自定义组件的根元素中。那可能吗?如果答案是肯定的,那么该包装器会附加什么?
    • 嗨@ConstaGorgan - 正如您在文档(help.sap.com/doc/a4265d5ea8314eb2929e6cf6fb8e35a5/1811/en-US/de/…)中看到的那样,只有一个属性component,您可以使用cms:component 设置它。 AFAIK,标签(自定义或标准/OOTB)不能对其父元素进行任何更改。也许您在docs.oracle.com/cd/E19879-01/819-3669/6n5sg7b50/index.html 找到了一些东西
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签