我正在尝试以编程方式从json字符串中提取数据,转换为字符串数组,并将其作为cq:tags属性和对应的值添加到节点中,但是,当我这样做时,虽然添加了[[cq:tags属性,但带有空白值。
我的节点是这样的:/content/<my project node>/ContentPage/jcr:content
ResourceResolver resolver = CommonUtils.getResourceResolver(resourceResolverFactory);
String[] strValue = tagList.stream().toArray(String[]::new); // tagList has String values in form of array.
Resource resource = resolver.getResource(CONTENT_DATA_NODE);
if (resource != null) {
Node node = resource.adaptTo(Node.class);
if (node != null) {
NodeIterator nodeIterator = node.getNodes();
while (nodeIterator.hasNext()) {
innerNode = nodeIterator.nextNode();
innerNode.setProperty(CQ_TAGS, strValue);
innerNode.getSession().save();
}
}
}
并且我的吊索用户映射器服务为,值:aa,bb,cc,dd这是由我的代码编写的,没有任何问题,仅当以编程方式添加cq:tags时才出现问题。尽管我可以从页面属性或在crxde节点本身中手动添加带有任何长值列表的cq:tags而不出现任何问题。 我在这里缺少什么并且在代码中做错了,它不仅可以添加cq:tags,而且如果存在cq:tags也可以覆盖。mybundle.core:datawrite=userdatawriter
,而且如果我的资源resolverfactory为null,我也会直接从请求中获取解析器。起初,我认为这可能是访问问题,所以我以编程方式尝试使用任何随机属性和值:属性:
xyz
P.S:我的AEM版本是AEM 6.5 SP2
def node = getNode('/content/screens/we-retail/apps/virtual-showroom/en/jcr:content')
String[] arr = ['a', 'b', 'c'];
String[] tagArr = ['we-retail:equipment', 'we-retail:activity/biking']
node.setProperty('foo', arr)
println node.getProperty('foo').values // prints the a, b,c tags
node.setProperty('cq:tags', tagArr)
session.save()
println node.getProperty('cq:tags').values // prints the a, b,c tags
println node.getProperty('foo').values // prints the a, b,c tags
但是,在检查CRXDE中的页面后,我看到该属性为空。当您使用的值与AEM中的现有标签匹配时,不会发生这种情况。例如:
def node = getNode('/content/screens/we-retail/apps/virtual-showroom/en/jcr:content') String[] arr = ['a', 'b', 'c']; String[] tagArr = ['we-retail:equipment', 'we-retail:activity/biking'] node.setProperty('foo', arr) println node.getProperty('foo').values node.setProperty('cq:tags', tagArr) println node.getProperty('cq:tags').values // prints the we-retail tags session.save() println node.getProperty('foo').values println node.getProperty('cq:tags').values // prints the we-retail tags
并且相同的值在CRXDE中可见。我相信,此行为是由
Day CQ Tagging Service(
控制的>com.day.cq.tagging.impl.JcrTagManagerFactoryImpl
)取消选中此框将禁用验证,并允许您保留这些值。但是,使用不存在的标签标记页面会导致其自身的问题。相反,我建议确保在使用它们之前确保创建这些标签。