【问题标题】:grails how to check if value is in list in gspgrails如何检查值是否在gsp的列表中
【发布时间】:2014-08-21 03:48:16
【问题描述】:

我从我的操作中得到一个列表,我想对照 GSP 中的另一个值进行检查。我希望能够查看该值是否在返回的列表中。我知道你可以直接比较

<g:if a="a">

但我正在寻找的是数组比较中的字符串

<g:if a in [a,b,c,d]>

需要类似的东西

<g:if test="${myList}.contains(${username})}">

试过了:

<g:if test="${myList.contains(username)}">

一切都返回假(即使包含应该为真)

测试数据:

        ${myList.keySet()}
        ${username}

<g:if test="${failedToSync.keySet().contains(username)}">
                <li>${username} yes</li>
            </g:if>
            <g:else>
                <li>${username} no</li>         
            </g:else>

输出:

[a] b
b no
[a] a
a no

附加信息:

"${username.stripIndent() == failedToSync.keySet()[0]}" 返回真

<g:if test="${(failedToSync.keySet()).contains(username.stripIndent())}"> returns false

【问题讨论】:

  • &lt;g:if test="${myList.contains(username)}"&gt; 应该做你想做的事,你确定列表肯定包含正确的东西吗?例如,如果myListUser 对象的列表,而usernameString,那么它将(正确地)总是返回false。
  • @IanRoberts 使用 getClass() 验证了两个对象并验证它们都是字符串
  • 您从用户那里得到了一些输入并试图在不重新加载页面的情况下比较该值?我认为您可能需要使用 AJAX 编写一些 javascript。
  • 我的输入可能有点晚了我只是在做类似的事情在我的情况下它是 myList.contains(instance.id) 直到我将它更改为 myList.containst(instance .id 作为字符串)。 id 被通过 json 发送回控制器并重新收集,因此改变了类型。斗篷和匕首总是通过做某事来测试.getClass()

标签: list grails gsp


【解决方案1】:

在 Groovy 中,您可以在任何集合上使用 .contains。所以,对于你的情况

<g:if test="${['a', 'b', 'c'].contains('a')}">
...
</g:if>

【讨论】:

  • 对不起,我想我需要更具体一点...... 在两个有效时返回 true和无效案例
  • 那是因为它应该是
  • 那么你不是在比较苹果和苹果。 myList 中的数据和用户名是同一个类吗?例如。他们都是字符串吗?我向你保证,它正在对两者进行比较。
  • 为问题添加了更多信息...我想我很接近但不知道为什么
【解决方案2】:

我想你已经回答了你自己的问题:是的,喜欢

<g:if test="${'a' in ['a','b','c','d']}">
    Some Content
</g:if>

【讨论】:

  • 由于某种原因无法正常工作,请参阅问题的最后部分
  • 你粘贴的代码应该是&lt;g:if test="${myList.contains(username)}"&gt;
  • 每次返回 false [a] b b no [a] a a no
  • 能否提供myListusername的内容?
  • 为问题添加了更多信息...我想我很接近但不知道为什么
【解决方案3】:

如果您愿意,可以使用自定义标签:

grails-app/taglib/com/demo/StackOverflowTagLib.groovy

package com.demo

class StackOverflowTagLib {
    static namespace = 'my'

    // ...

    def isInList = { attrs, body ->
        def val = attrs.val
        def list = attrs.collection
        if(val in list) {
            out << body()
        }
    }
}

grails-app/views/demo/index.gsp

<html>
<body>
    <my:isInList val="Jeff" collection="${names}">
        Yep, Jeff was in there.
    </my:isInList>
</body>
</html>

grails-app/controllers/com/demo/DemoController.groovy

package com.demo

class DemoController {

    def index() {
        [names: ['Jeff', 'Betsy', 'Zack', 'Jake']]
    }
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2011-02-10
    • 2017-09-06
    相关资源
    最近更新 更多