我从 JCR 存储库检索内容对象和 属性 的代码是否有效?

Is my code to retrieve a content object and property from a JCR repository valid?

我正在为 O'Reilly (http://flyingsquirrelbook.com/) 完成一本书。

在本书中,我比较了几个代码示例,以 (1) 从存储库中检索内容对象,以及 (2) 从该对象中检索单个 property/attribute。我这样做是为了展示不同CMS的API是不同的,但在逻辑上有些相似。我有来自 C# (Episerver)、PHP (Concrete5)、Python (Plone) 和 Magnolia (Java,使用 JCR) 的示例。

我已经验证了前三个,但我没有使用 Java 或 JCR 的经验。我需要有人查看这段代码并告诉我这是否是一种合理接受的方式来执行我上面所说的:

Session session = MgnlContext.getJCRSession("myWorkspace");
Node myPage = session.getNodeByIdentifier("123");
String title = myPage.getProperty("PageTitle").getValue().getString() 

出于任何原因,这是非常错误的吗?

虽然您不会让编译器抱怨代码,但您可以做一些事情来改进示例。
getNodeByIdentifier() 方法采用 UUID 格式的节点,所以你应该显示相同而不是使用简单的 Int 作为 Id。
同样,属性 名称通常以小写字母开头。
最后调用 getValue() 是不必要的。您可以直接在 属性 对象上调用 getString()

HTH,
一月

Apache Jackrabbit "first hops" page 中的一些示例可能对您有所帮助。

具体来说,SecondHop class 展示了如何创建、检索和删除内容。这是显示检索的片段:

Node node = root.getNode("hello/world"); 
System.out.println(node.getPath()); 
System.out.println(node.getProperty("message").getString());

该示例使用 getNode() 获取节点,但您也可以像之前那样通过标识符获取它:

Node node = session.getNodeByIdentifier(id);

除了 Jan 提到的 getString() 之外,您的第三行缺少一个分号。