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

Aem 用于比较字符串属性和列表计数的表达式,aem,sightly,Aem,Sightly,我试图比较两个值,一个来自对话框,另一个是Map的countvar。但是得到一个错误: 原因:java.lang.UnsupportedOperationException:比较中的类型无效。仅数字类型支持比较 这是获取页面链接列表的简单代码,但如果最大计数集将显示受限(最大)链接数。若三个设置为最大数量,只有3个链接会出现在列表中 <div id="${properties.containerId}" class="${properties.containerClass}"> &l

我试图比较两个值,一个来自对话框,另一个是Map的countvar。但是得到一个错误:

原因: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>


将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>


似乎保存变量的对象是列表,而不是列表项。在链接中,它显示了一个示例


对于以下比较运算符:
<=>
,显然需要数字类型。但变量来自何处并不重要,无论它们来自属性还是来自列表计数器(或两者的混合),它都能按预期工作。在内容存储库中,您的值可能存储为文本(字符串),而不是数字(十进制、双精度或长型)。调整对话框以使用数字字段,以便将值作为数字存储在存储库中,或者按照andeh的建议,在use API中进行转换

然后,正如Christopher所指出的,保存列表的
count
变量的对象是
itemList
,或者作为重命名的
item
变量,在您的情况下它是
keyNameList

另外,请注意,Sightly的目标是为模板逻辑重用HTML元素,以避免标记与模板块混淆。但是,应该避免在一个单独的
元素上添加每条指令,然后使用
数据展开再次删除它们!这使得标记很难阅读,因为人们不再知道哪个
将被显示,哪个仅用于逻辑

因此,您的模板可以按如下方式编写,而不需要任何
数据展开

<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>
然后可以在模板中以
${listOfLink.maxcount}
的形式访问它


以下内容可能也很有用。

我知道它可以通过Java实现,但是有没有一种方法可以在没有Java的情况下实现这个简单的操作?
<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>
public int getMaxcount() {
    return getProperties().get("maxcount", 0);
}