Интерпретация динамического атрибута в JSP в Hybris - PullRequest
0 голосов
/ 09 сентября 2018

Я создал динамический атрибут для обработки видимости записей узла навигации в соответствии со всеми соответствующими правилами Hybris. Мне удалось получить атрибут в коде Java без каких-либо проблем, но я не мог заставить JSP интерпретировать его. Мой класс DynamicAttributeHandler работал без сбоев, но JSP не смог прочитать его. Это были шаги создания атрибута:

1) items.xml

<attribute qualifier="navigationNodeVisibility" type="java.lang.Boolean">
       <persistence type="dynamic" attributeHandler="navigationNodeVisibilityAttributeHandler"/>
       <modifiers read="true" write="false" search="true"/>
       <defaultvalue>java.lang.Boolean.TRUE</defaultvalue>
</attribute>

2) NavigationNodeVisibilityAttributeHandler.java

@Override
public Boolean get(CMSNavigationNodeModel model) {
    if (model != null) {
        for(CMSNavigationEntryModel cmsNavigationEntry:model.getEntries()){
            if(cmsNavigationEntry.getItem() instanceof  CMSLinkComponentModel){
                CategoryModel category= ((CMSLinkComponentModel)cmsNavigationEntry.getItem()).getCategory();
                if((category.getVisibility()== null || category.getVisibility() ) && ActiveProductStatus.ACTIVE == category.getActiveProductStatus()
                        && ManageCategoryByDateStatus.ACTIVE == category.getManageCategoryByDateStatus()){
                    return Boolean.TRUE;
                }
            }
        }
        return Boolean.FALSE;
    }
    return null;
}

3) Регистрация боба

<bean id="navigationNodeVisibilityAttributeHandler" class="com.inomera.hybris.core.handler.NavigationNodeVisibilityAttributeHandler" />

4) ant clean all && ant updatesystem

Всякий раз, когда я вызывал его в файле jsp, я получал сообщение об ошибке типа ".. Возникла исключительная ситуация при обработке страницы JSP .."

<c:forEach items="${component.navigationNode.children}" var="cx">
    ${cx.navigationNodeVisibility}
</c:forEach>

Вызов атрибута таким способом не вызвал исключение, но в моем случае его необходимо использовать внутри цикла for.

${component.navigationNode.children[0].navigationNodeVisibility}

Любая помощь или предложение будут очень признательны

Примечание: ${cx.getNavigationNodeVisibility()} выдало то же исключение JSP.

Редактировать: пример исключения JSP

WARN  [hybrisHTTP14] [XXXXXXXXXXXX] [DefaultCMSComponentRendererRegistry] Error processing component tag. currentComponent [CategoryNavigationComponentModel (8796098036796@1)] exception: An exception occurred processing JSP page /WEB-INF/views/responsive/cms/categorynavigationcomponent.jsp at line 14

11: <nav id="menu" style="display: none;">
12:         <ul>
13:             <c:forEach items="${component.navigationNode.children}" var="childLevel1">
14:                 <c:if test="${ childLevel1.visible eq 'true' && childLevel1.navigationNodeVisibility}">
15:                     <li>
16:                         <c:forEach items="${childLevel1.entries}" var="childEntry1" end="1">
17:                             <c:if test="${not empty childLevel1.children}">

1 Ответ

0 голосов
/ 11 сентября 2018

Проверяли ли вы, если category не равно NULL в вашем обработчике атрибутов?

Я предполагаю, что вы разрешаете только версию онлайн-каталога в вашем интерфейсе, и если вы используете категорию из промежуточного каталога, вы получите нулевое значение. Или, может быть, кто-то забыл добавить категорию в первую очередь.

...