【发布时间】:2014-08-01 16:32:48
【问题描述】:
我在尝试访问in this Sling Docs提到的资源属性时不小心遇到了一个情况。
如果属性名称以数字开头,ValueMap 总是返回 null,而通过 Node API 访问相同的属性会正确返回值。
尝试通过#keySet() 和#containsKey() 检查该键是否在ValueMap 中可用。显示了所有的key,但是key对应的value是null。
以下是我试图执行的一段代码。
Iterator<Resource> resources = resourceResolver.findResources(query, "xpath");
while(resources.hasNext()) {
Resource res = resources.next();
ValueMap resProps = res.adaptTo(ValueMap.class);
String xyz = resProps.get("2014_xyz",String.class); // returns null
Node node = res.adaptTo(Node.class);
if(node.hasProperty("2014_xyz")) {
String abc = node.getProperty("2014_xyz").getString(); //returns value
}
}
是否有任何限制,属性名称不应以数字开头?
我查看了JCR repository model 第 3.2.2 节以检查有效名称。它表示有效字符为XmlChar – InvalidChar,其中XmlChar 是与http://www.w3.org/TR/xml/#NT-Char 处的字符产生匹配的任何字符
他们是否也考虑了文档中提到的Common Syntactic Constructs?如果是这样,为什么 JCR 允许使用这些名称并正确返回值?
或者,这与 Sling 的实现有关吗?我在这里错过了什么吗?
P.S:我在 CQ 5.6.1 中进行了相同的测试,并且 ValueMap 似乎在那里工作正常。不确定 CQ 5.5。
【问题讨论】: