【问题标题】:Access to a property in a specific resource via sightly通过Sightly访问特定资源中的属性
【发布时间】:2017-02-06 15:21:48
【问题描述】:

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

主要资源有两个孩子,应用在第一个。我想从第二个孩子那里得到一个财产。

我能找到类似的东西吗:

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

谢谢!

【问题讨论】:

    标签: aem sling sightly


    【解决方案1】:

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

    话虽如此,可能有一些我没有想到的有效用例需要获得第二个孩子——据我所知,您需要创建一个 Java 或 JS 对象并使用 @ 987654321@。

    简单示例 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>
    

    【讨论】:

    • 如本答案所述,您真的不应该依赖项目顺序。相反,您应该按名称引用资源。
    • 我认为 OP 的意思是另一个兄弟而不是第二个。正如@ub1k 所说,可以修改逻辑以根据名称否定原始资源。
    【解决方案2】:

    这是我用于将内容转换为 JSON 的另一个示例。 JSON的内容作为解析的Objects,每个Object都有Attributes。

    <div data-sly-use.jsonHelper="${'com.service.helpers.JSONHelper'
      @json=model.getRawJson}">
    
      ${jsonHelper.parsedJSON[item].commodityList[subitem].name}
      ...
    </div>
    

    【讨论】:

    • 我不确定这是如何解决问题的
    • 我试图展示一个在 Ayoub 要求的情况下使用 Sightly 的示例,以在涉及多个对象或嵌套对象时检索值。
    • 啊,我明白了!这就说得通了。唯一的问题是这适用于嵌套对象,但不适用于资源子代,这是发布者遇到问题的具体问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多