时间:2016-09-28 14:53:02

标签: aem sling sightly

我想访问资源中的特定属性。

主要资源包括两个孩子和应用程序在第一个。我想从第二个孩子那里得到一处房产。

我能找到类似的东西吗?

 ${resource.parent.child[1].valueMap.title} 

谢谢!

2 个答案:

答案 0 :(得分:2)

要开始 - 请注意可能无法保证孩子的顺序,除非您使用的是sling:OrderedFolder或其他一些有序类型。所以试图让“第二个”孩子甚至没有意义。

话虽如此,可能还有一些我认为不需要第二个孩子的有效用例 - 据我所知,你需要创建一个Java或JS对象并使用{ {3}}。

简单示例Java对象

package apps.your_app.components.yourComponent;

import com.adobe.cq.sightly.WCMUsePojo;
import org.apache.sling.api.resource.Resource;

import java.util.Iterator;

public class Model extends WCMUsePojo {

    @Override
    public void activate() throws Exception {
        //do some stuff if needed
    }

    public Resource getSecondSibling() {
        Resource parent = getResource().getParent();
        Resource secondSib = null;
        Iterator<Resource> children = parent.listChildren();

        //find the second child
        for (int i = 0; i < 2; i++)
            secondSib = children.next();
        return secondSib;
    }
}

在声音中使用它:

<sly data-sly-use.model="Model">${model.secondSibling.propertyName}</sly>

答案 1 :(得分:-1)

这是我用于将内容转换为JSON的另一个示例。 JSON的内容作为已解析的对象,每个对象都有属性。

<div data-sly-use.jsonHelper="${'com.service.helpers.JSONHelper'
  @json=model.getRawJson}">

  ${jsonHelper.parsedJSON[item].commodityList[subitem].name}
  ...
</div>