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

时间:2016-01-08 16:38:57

标签: java jcr magnolia

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

在本书中,我将几个代码示例进行比较,以(1)从存储库中检索内容对象,以及(2)从该对象中检索单个属性/属性。我这样做是为了演示不同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() 

出于任何原因这是不是很严重?

2 个答案:

答案 0 :(得分:2)

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

HTH,

答案 1 :(得分:1)

Apache Jackrabbit "first hops" page有一些您可能会觉得有帮助的例子。

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

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()之外,你的第三行缺少一个分号。