Я создал динамический атрибут для обработки видимости записей навигационного узла в соответствии со всеми соответствующими правилами 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-компонента
<bean id = "navigationNodeVisibilityAttributeHandler" class = "com.inomera.hybris.core.handler.NavigationNodeVisibilityAttributeHandler" />
4) муравей очистить все && система обновлений муравьев
Всякий раз, когда я вызывал его в файле 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}">
Вы проверили, не является ли category
нулевым в вашем обработчике атрибутов? Я предполагаю, что вы разрешаете только версию онлайн-каталога в своем интерфейсе, и если вы используете категорию из поэтапного каталога, вы получите нулевое значение.
Я понял, что вчера вечером некоторые категории, относящиеся к узлам навигации, были нулевыми. Я бы написал сюда, если бы была возможность днем. Ты со мной быстро. Да, это было полностью из-за того, что некоторые категории являются нулевыми.
@hatipkabak Не могли бы вы принять мой ответ ...
Вы проверили, не является ли category
нулевым в вашем обработчике атрибутов?
Я предполагаю, что вы разрешаете только версию онлайн-каталога в своем интерфейсе, и если вы используете категорию из поэтапного каталога, вы получите нулевое значение. Или, может быть, кто-то вообще забыл добавить категорию.
Как выглядит исключение JSP?