错误[Thread-290] [BaseUICockpitPerspective]项目无法激活。 java.lang.IllegalArgumentException:值是instanceof Collection,但不能为键:contentSlots的空集合

2020-09-13 11:53发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我创建了一个具有导航节点作为属性的组件(它具有带有链接组件的子导航节点)。 在 CMSCockpit 编辑器视图中,我需要编辑链接组件的链接名称和URL。

在打开链接组件的编辑器视图时,它仅显示链接名称并抛出与提出的问题相同的错误。

示例:编辑器视图 [父导航节点(编辑器视图)->子导航节点(编辑器视图)->子导航节点(编辑器视图)->链接 组件(编辑器视图)[仅显示名称]

如果我将该链接组件添加到内容插槽,则它工作正常。 但是我不需要将其添加到内容槽中。

请提出答案。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我创建了一个具有导航节点作为属性的组件(它具有带有链接组件的子导航节点)。 在 CMSCockpit 编辑器视图中,我需要编辑链接组件的链接名称和URL。

在打开链接组件的编辑器视图时,它仅显示链接名称并抛出与提出的问题相同的错误。

示例:编辑器视图 [父导航节点(编辑器视图)->子导航节点(编辑器视图)->子导航节点(编辑器视图)->链接 组件(编辑器视图)[仅显示名称]

如果我将该链接组件添加到内容插槽,则它工作正常。 但是我不需要将其添加到内容槽中。

请提出答案。

付费偷看设置
发送
7条回答
吹牛啤
1楼 · 2020-09-13 12:25.采纳回答

Narendra,谢谢您的回答,

是的,在6.7 dao中没有空检查,但仍然为弹性搜索条件添加了一个空的contentSlots

  public Collection  findPagesByContentSlotsAndPageStatuses(final Collection  contentSlots,最终Collection  catalogVersions,最终List  pageStatuses){
          最终的StringBuilder queryBuilder = new StringBuilder();
          最终Map  queryParameters = new HashMap ();
          queryBuilder.append(" SELECT {ap.pk}").append(" FROM {AbstractPage AS ap").append(" JOIN ContentSlotForPage AS csfp").append(" ON {ap.pk} = {csfp.page}  "" .append("将CmsPageStatus作为状态加入"" .append(" ON {ap.pageStatus} = {stat.PK}}").append(" WHERE");
          queryBuilder.append(FlexibleSearchUtils.buildOracleCompatibleCollectionStatement("(?contentSlots)中的{{csfp.contentSlot}"," contentSlots"," OR",(Collection)contentSlots,(Map)queryParameters));
          queryBuilder.append(" AND");
          queryBuilder.append(FlexibleSearchUtils.buildOracleCompatibleCollectionStatement("(catalogVersions)中的{ap.catalogVersion}"," catalogVersions"," OR",(Collection)catalogVersions,(Map)queryParameters)));
          this.appendPageStatusesToQuery(queryBuilder,pageStatuses,queryParameters," AND");
          最终SearchResult 结果=(SearchResult )this.search(queryBuilder.toString(),(Map)queryParameters);
          返回(Collection )result.getResult();
      }

  

但是FlexibleSearchQuery将检查空集合,将对空集合抛出该错误

  public void addQueryParameters(Map 参数){
     迭代器var3 = params.entrySet()。iterator();
        } entry =(Entry)var3.next();
        ServicesUtil.validateParameterNotNull(entry.getValue(),"为必填值,键为null:" +(String)entry.getKey());
     } ** while(!(entry.getValue()Collection的实例)||!((Collection)entry.getValue())。isEmpty());
 
     抛出新的IllegalArgumentException("值是Collection的instanceof,但是不能为键的空集合:" +(String)entry.getKey()); **
 
     条目条目;
     做{
        如果(!var3.hasNext()){
           this.queryParameters.putAll(params);
           返回;
  }


  

最后,正如您所说,我覆盖了DefaultCMSPageDao-> findPagesByContentSlots方法,此问题已得到解决

 /**
   * CustomCMSPageDao
   */
  公共类CustomCMSPageDao扩展DefaultCMSPageDao
  {
      @Override
      公共Collection  findPagesByContentSlots(最终Collection  contentSlots,
              最终Collection  catalogVersions)
      {
          如果(CollectionUtils.isEmpty(contentSlots))
          {
              返回Collections.emptyList();
          }
          返回this.findPagesByContentSlotsAndPageStatuses(contentSlots,catalogVersions,Arrays.asList(CmsPageStatus.ACTIVE));
      }
  }
  
SC_Yao
2楼-- · 2020-09-13 12:31

我们面临着同样的问题。 看起来6.7代码已为DefaultCMSPageService中的getPagesForComponent()更新。 道中没有对插槽的空检查,需要重写此值以执行空检查。

问题主要是因为未为组件分配任何插槽。 如果为该组件分配了插槽,则您可以看到编辑器以及同步作品。

clasier
3楼-- · 2020-09-13 12:28

嗨,

我在使用链接组件的自定义组件中也遇到了类似的问题。 您是如何解决的?

落灬小鱼
4楼-- · 2020-09-13 12:28

我遇到了同样的问题,但是找不到解决方法。 一种解决方法是创建一个虚拟内容插槽,并将其链接到组件。 然后我就可以编辑组件

Tong__Ming
5楼-- · 2020-09-13 12:42

我假设您遇到了这样的错误,因为您将AbstractCMSComponent的实例用作链接组件(必须分配给某些插槽)而不是实例

空代码
6楼-- · 2020-09-13 12:41

链接是强制性的,不是可选的。

悻福寶寶
7楼-- · 2020-09-13 12:34

我将hybris从6.0升级到了6.6,无法在cmscockpit中编辑所有横幅组件,错误"值是instanceof集合,但不能为键:contentSlots的空集合",并且在创建时 现有旋转图像组件中有一个新的横幅组件,该新的横幅也无法编辑,是否有针对此问题的建议?

谢谢

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答