我有一个组件需要从同一页面上的另一个组件获取属性。
有没有办法从NODE
获取组件的currentPage
对象?
我有一个我需要在代码中获取的节点的名称。
答案 0 :(得分:9)
假设您需要的节点位于Page/jcr:content/yournode
:
Page
对象有一个方法getContentResource()
,默认情况下会返回jcr:content
资源节点。您还可以使用page.getContentResource("yournode")
获取jcr:content
以下的特定节点。
如果您的节点出于某种原因与jcr:content
(它不应该是btw)兄弟姐妹,您可以使用resource.listChildren()
迭代资源的子节点。
请记住,这是所有Sling API,因此您管理的是资源,而不是节点。您可以使用resource.adaptTo(Node.class)
答案 1 :(得分:1)
通常每个Page类都有一个方法可以检索jcr:content
中更清晰的节点:
Node node = CurrentPage.getContentResource("COMPONENTNAME").adaptTo(Node.class);
开发人员应在将资源调整到节点之前检查资源是否存在。
现在我们有了一个节点,我们可以从该节点中提取属性。
String title = node.getProperty("jcr:title").getString();
这样您就可以获取组件的任何属性。
答案 2 :(得分:0)
我想补充一点,通过将请求委托给servlet可以更清晰地解决这个问题,前提是解决问题需要分离关注点 - 将视图与控制器逻辑分开。 LINK EXPLAINING IN DETAIL HOW VALIDATION IS DONE USING SLING SERVLETS
使用下面调用托管servlet托管的逻辑
将验证器添加到表单 var url = CQ.HTTP.addParameter(dialog.path + '.validator.json', 'value', value);
var result = CQ.HTTP.eval(url);
and in the servlet we access the node and its parents using below logic
final Node currentNode = request.getResource().adaptTo(Node.class);
try {
final Node par = currentNode.getParent();
final NodeIterator nodes = par.getNodes();
// get all form names for the current paragraph system
while (nodes.hasNext()) { //and the business logic