我有一个场景,需要在店面中显示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
答案 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>
构建和更新数据库后,我注意到此解决方案按预期工作。