检索并分配 jcr:mixinTypes magnolia 中的多值属性
Posted
技术标签:
【中文标题】检索并分配 jcr:mixinTypes magnolia 中的多值属性【英文标题】:Retrieve and assign jcr:mixinTypes a multi-valued property in magnolia 【发布时间】:2020-01-30 10:28:00 【问题描述】:当我尝试在 magnolia 中获取多值属性时出现错误,因为我将它分配给 String 类型。如何正确读取单值和多值属性(因为两者都存在)?
javax.jcr.ValueFormatException: 属性 /wcmstest/de/search/jcr:mixinTypes 是一个多值属性,所以它是 值只能作为数组检索 在 org.apache.jackrabbit.core.PropertyImpl.internalGetValue(PropertyImpl.java:483) 在 org.apache.jackrabbit.core.PropertyImpl.getValue(PropertyImpl.java:510) 在 org.apache.jackrabbit.core.PropertyImpl.getString(PropertyImpl.java:520) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 info.magnolia.jcr.wrapper.DelegatePropertyWrapper.getString(DelegatePropertyWrapper.java:162) 在 ch.uzh.module.versioning.CreateNestedMap.nestedMap(CreateNestedMap.java:32) 在 ch.uzh.module.versioning.ContextLoggerCommand.execute(ContextLoggerCommand.java:78) 在 info.magnolia.commands.MgnlCommand.executeSynchronized(MgnlCommand.java:80) 在 info.magnolia.commands.MgnlCommand.execute(MgnlCommand.java:69) 在 info.magnolia.commands.chain.ChainBase.execute(ChainBase.java:101) 在 info.magnolia.commands.DelegateCommand.execute(DelegateCommand.java:66) :
这是我正在使用的代码:
HashMap<String, Object> map = new LinkedHashMap<>();
PropertyIterator pi;
try
pi = node.getProperties();
//Get properties for the root node
while(pi.hasNext())
Property p = pi.nextProperty();
String name = p.getName();
String val = p.getString();
map.put(name,val);
//end of while for properties of root node
catch (RepositoryException e)
// TODO Auto-generated catch block
e.printStackTrace();
【问题讨论】:
***.com/questions/42822066/… ? 谢谢@reporter 我会试一试,如果 prop.isMultiple() 将它存储为数组。我想知道这个存储多值属性的数组应该是什么类型? 我只与 Magnolia 的“大姐姐”合作,调用 Adobe Experience Manager -short AEM-。它提供了一个允许查看存储节点的 gui。叫crx。 Magnolia 似乎也提供了这样的 gui。以你的例子:你的目标节点的类型是一个字符串并且有多个值,那么你需要字符串[],否则是字符串。 helpx.adobe.com/content/dam/help/en/experience-manager/6-2/… 来自 AEM crx gui 的图片。 jcr api 也提供了一种确定节点类型的方法。 【参考方案1】:感谢@reporter 和一些反复试验。这是working solution
。
HashMap<String, Object> map = new LinkedHashMap<>();
PropertyIterator pi;
try
pi = node.getProperties();
//Get properties for the root node
while(pi.hasNext())
Property p = pi.nextProperty();
String name = p.getName();
String val;
//determine if property is multi-value
if (p.isMultiple())
//multi-value property
val=p.getValues().toString();
else
//single-value property
val = p.getValue().getString();
map.put(name,val);
//end of while for properties of root node
catch (RepositoryException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
以上是关于检索并分配 jcr:mixinTypes magnolia 中的多值属性的主要内容,如果未能解决你的问题,请参考以下文章