用于比较字符串属性和列表计数的表达方式

时间:2015-07-06 19:21:13

标签: cq5 aem sightly

我正在尝试比较两个值,一个来自对话框,另一个来自Map的count var。但是收到错误:

  

引起:java.lang.UnsupportedOperationException:比较中的类型无效。仅对数字类型

支持比较

这是获取页面链接列表的简单代码,但如果最大计数设置将显示受限(最大)否。的链接。如果三个设置为最大计数,则列表中只有3个链接。

<div id="${properties.containerId}" class="${properties.containerClass}">
<div data-sly-use.listOfLink="com.aem.web.core.components.ListOfLink" data-sly-unwrap>

    <div data-sly-list.keyName="${listOfLink.pageMap}" data-sly-unwrap>
        <div data-sly-test.maxcount="${properties.maxcount}" data-sly-unwrap>
        <!-- Check the max count set in dialog(property ) for link to display from Map-->
            <div data-sly-test="${keyName.count <= properties.maxcount}"  data-sly-unwrap>
                <p><a href="${keyName}">${listOfLink.pageMap[keyName][0]</a></p>
            </div>

        </div>

    </div>
</div>

3 个答案:

答案 0 :(得分:1)

对于以下比较运算符:< <= >= >,Sightly需要数字类型。但是变量来自何处并不重要,无论它们来自属性还是来自列表计数器(或两者的混合),它都可以正常工作。很可能在内容存储库中,您的值已存储为text(String)而不是数字(Decimal,Double或Long)。调整对话框以使用数字字段,以便将值存储为存储库中的数字,或者,如建议的那样,在Use-API中进行转换。

然后,正如Christopher所说,持有列表count变量的对象是itemList,或者当您重命名为item变量时,它是keyNameList情况下。

此外,请注意,Sightly的目标是重用模板逻辑的HTML元素,以免混淆带有模板块的标记。但是,应该避免在单独的<div>元素上添加每个Sightly指令,然后再次使用data-sly-unwrap删除它们!它使得标记非常难以阅读,因为人们不再知道哪个<div>将被显示以及哪一个仅用于逻辑。

因此,您的模板可以编写如下,没有任何data-sly-unwrap

<div id="${properties.containerId}"
     class="${properties.containerClass}"
     data-sly-use.listOfLink="com.aem.web.core.components.ListOfLink"
     data-sly-list.keyName="${listOfLink.pageMap}">
    <p data-sly-test="${properties.maxcount && keyNameList.count <= properties.maxcount}">
        <a href="${keyName}">${listOfLink.pageMap[keyName][0]}</a>
    </p>
</div>

如果您无法更改对话框以存储数字,则可以在Use-API中强制将字符串属性设为数字。以下代码说明了ListOfLink对象扩展了WCMUsePojo:

public int getMaxcount() {
    return getProperties().get("maxcount", 0);
}

然后,您可以在模板中访问${listOfLink.maxcount}

也可能是以下Sightly Style Guide from Netcentric

答案 1 :(得分:0)

将mling注入maxcount到你的java类中。创建一个getter,并使用listOfLink.maxcount轻松检索它。

<div data-sly-test="${keyName.count <= listOfLink.maxcount}"  data-sly-unwrap>
            <p><a href="${keyName}">${listOfLink.pageMap[keyName][0]</a></p>
</div>

答案 2 :(得分:0)

似乎持有变量的对象是列表而不是列出的项目。在链接中它显示了一个示例...

http://docs.adobe.com/docs/br/aem/6-0/develop/sightly.html#list

<div data-sly-test="${keyNameList.count <= properties.maxcount}" data-sly-unwrap>