如何创建本地化字符串集合

时间:2018-10-09 15:39:04

标签: hybris

我有一个场景,需要在店面中显示String元素列表。经过调查,我发现Hybris具有 StringCollection 。但是应在店面中显示的字符串应进行本地化。

实现这种情况的最佳方法是什么? 我知道我可以创建一个ItemType,它只有一个String Type的本地化属性,然后在这个新创建的项目和将包含Strings列表的项目之间创建一个关系。


编辑:

如果我使用:

<collectiontype code="localizedStringColl" elementtype="localized:java.lang.String"  autocreate="true" generate="true"  type="list" />

尝试在列表中添加新的String时,后台出现错误:

  de.hybris.platform.servicelayer.exceptions.UnknownIdentifierException: No composed type localized:java.lang.String exists
at de.hybris.platform.servicelayer.type.daos.impl.DefaultTypeDao.findComposedTypeByCode(DefaultTypeDao.java:71) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.type.impl.DefaultTypeService.getComposedTypeForCode(DefaultTypeService.java:114) ~[coreserver.jar:?]
at com.hybris.backoffice.solrsearch.services.impl.DefaultBackofficeFacetSearchConfigService.findSearchConfigForTypeCode(DefaultBackofficeFacetSearchConfigService.java:172) ~[backofficesolrsearchserver.jar:?]
at com.hybris.backoffice.solrsearch.services.impl.DefaultBackofficeFacetSearchConfigService.isSolrSearchConfiguredForType(DefaultBackofficeFacetSearchConfigService.java:122) ~[backofficesolrsearchserver.jar:?]

混合版本 6.7

2 个答案:

答案 0 :(得分:1)

  

如何创建本地化的字符串集合?

您可以使用 localized:java.lang.String 声明 CollectionType ,并在声明属性时将其用作类型。

<collectiontype code="localizedStringColl" elementtype="localized:java.lang.String"  autocreate="true" generate="true"  type="list" />

现在您可以像使用它了

            <attribute qualifier="myAttib" type="localizedStringColl" >
                <description>MyAttib</description>
                <persistence type="property" />
            </attribute>

  

实现这种情况的最佳方法是什么?

首先浏览this answer,它可以帮助您了解数据如何存储在collectionTypes和RelationTypes中。

如链接中所述,如果是CollectionTypes,将存储以逗号分隔的PK列表,这可能会导致值被截断,并且如果您的集合数据变长,则会丢失数据...在这种情况下,最好选择RelationType。

如果您知道String的集合没有那么大,可以使用collectionType。

答案 1 :(得分:0)

所有本地化类型都在 {extensionName} -items.xml 中定义为映射。例如,在core-items.xml

中定义了 localized:java.lang.String

因此,最好的方法是创建一个新的地图类型:

<maptypes>
    <maptype code="localized:StringCollection" argumenttype="Language" returntype="StringCollection" generate="false"/>
</maptypes>

现在剩下的唯一事情就是对需要此类型的属性使用 localized:StringCollection

        <itemtype code="CustomCmsItemComponent" extends="SimpleCMSComponent"
                  autocreate="true" generate="true"
                  jaloclass="com.test.hybris.core.jalo.cms.CustomCmsItemComponent">
            <attributes>
                <attribute qualifier="localizedStringCollectionTest" type="localized:StringCollection">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>

构建和更新数据库后,我注意到此解决方案按预期工作。