Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JCR存储库检索内容对象和属性的代码是否有效?_Java_Jcr_Magnolia - Fatal编程技术网

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

Java 从JCR存储库检索内容对象和属性的代码是否有效?,java,jcr,magnolia,Java,Jcr,Magnolia,我正在为O'Reilly()完成一本书 在本书中,我比较了以下代码示例:(1)从存储库检索内容对象,(2)从该对象检索单个属性/属性。我这样做是为了演示不同CMS的API是不同的,但在逻辑上有些相似。我有来自C#(Episerver)、PHP(Concrete5)、Python(Plone)和Magnolia(Java,使用JCR)的示例 我已经验证了前三个,但我没有Java或JCR方面的经验。我需要有人查看此代码,并告诉我这是否是一种合理接受的方式来执行我上面所述的操作: Session se

我正在为O'Reilly()完成一本书

在本书中,我比较了以下代码示例:(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() 

无论出于什么原因,这是非常错误的吗?

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

HTH,

Jan

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

HTH,
Jan

有一些您可能会觉得有用的例子

具体来说,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()之外,您的第三行还缺少一个分号。

还有一些示例,您可能会发现这些示例很有用

具体来说,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()之外,您的第三行还缺少一个分号。

是否有效?你有任何理由相信这是非常错误的吗?你真的认为StackOverflow是为一本书进行研究的合理方式吗?我不知道,我不是Java开发人员。是的,我正在研究一本书,但这仍然是一个关于代码准确性的技术问题。我认为这非常合适。我不是在征求别人的意见或做调查。从实际意义上讲,如果我只是想让这段代码在某个地方执行,会有什么不同吗?它有效吗?你有任何理由相信这是非常错误的吗?你真的认为StackOverflow是为一本书进行研究的合理方式吗?我不知道,我不是Java开发人员。是的,我正在研究一本书,但这仍然是一个关于代码准确性的技术问题。我认为这非常合适。我不是在征求别人的意见或做调查。在实际意义上,如果我只是想让代码在某个地方执行,会有什么不同吗?这正是我所需要的。谢谢。或者使用
PropertyUtil.getString(myPage,“PageTitle”)
(还有一个
getString
方法,其中第三个参数是默认值)。顺便说一下,Magnolia页面的页面标题属性实际上就是
title
。Magnolia网页工作区被称为
网站
。这正是我所需要的。谢谢。或者使用
PropertyUtil.getString(myPage,“PageTitle”)
(还有一个
getString
方法,其中第三个参数是默认值)。顺便说一下,Magnolia页面的页面标题属性实际上就是
title
。用于页面的Magnolia工作区称为
网站