【问题标题】:Grails/GSP: break out of <g:each>Grails/GSP:突破 <g:each>
【发布时间】:2010-07-13 03:22:35
【问题描述】:

有没有办法摆脱?我有一个页面,其中我正在遍历一个列表,如果这是存储在 DB 中的值,我必须确保选中一个复选框。

为了更清楚一点,请考虑以下内容:

<g:each in=${list1}>
    <g:each in=${list2}>
        <g:if test="${list1.id == list2.id}">
            <input type="checkbox" ... checked="checked" />
        </if>
    </g:each>
    ...
</g:each>

其中 list1 是 Domain1.list() (即所有可能的值),而 list2 是 Domain2.find(...) (即 SELECTED 值)

在 g:each 中,我需要使用复选框显示 list1 的所有内容(因此,内部每个后的“...”),但我需要确保 list2 中的那些(用户选择的项目是保存到数据库)应进行相应检查(if 语句)。

现在,如果在第一次迭代中检查状态发生了变化,我需要退出内部每个...有什么办法吗?

谢谢!

【问题讨论】:

    标签: grails each gsp break


    【解决方案1】:

    不,不是每个子句。

    我只是编写我自己的 taglib,它采用 list1 和 list2 并为您进行迭代,返回到

    <g:eachCheckedItem list1="${list1}" list2="${list2}">
        <input type="checkbox" ... checked="checked"/>
    </g:eachCheckedItem>
    

    在你的 taglib 类中:

    def eachCheckedItem = { attrs, body ->
        def list1 = attrs.list1
        def list2 = attrs.list2
    
        list1.findAll { list2.contains(it) }.each {
            out << body(listItem: it)  // access to listItem variable inside gsp
        }
    
    }
    

    类似的东西(针对您的具体问题进行了调整)很容易编写,并且还可以相当多地清理您的 gsp 文件。我一直在我的标签库中使用这些类型的自定义迭代器。

    【讨论】:

    • 啊,好吧...我会再看看这个。谢谢!!
    【解决方案2】:

    如果我理解正确,你需要这样的东西:

    <g:each var="elem1" in="${list1}">
       <g:if test="${list2.any{it.id==elem1.id}}">
         <input type="checkbox" checked="checked" />
       </g:if>
       ...
    </g:each>
    

    没有 g:any 标签,但正如 Ted 指出的那样,编写一个标签很容易(留给读者作为练习)。然后你可以将内部标签简化为这样的:

    <g:any test="${it.id==elem1.id}" in="${list2}">...</g:any>
    

    【讨论】:

      【解决方案3】:

      您应该在模型中执行此操作,因此您在视图中只有一个简单的循环。然后只需让控制器调用 Domain.findMyList() 或其他什么。

      【讨论】:

        【解决方案4】:

        对于寻找原始发布者问题答案的谷歌用户,gsp 中没有 break 命令。这里有一些更好的回应,在我看来,最好的回应是尝试使用 .findAll { .. } 来仅查找您希望在“休息”之前工作的集合。

        http://markmail.org/message/tt2einl3ntwgzdep#query:grails%20gsp%20break%20out%20of%20loop+page:1+mid:nzhgwdsgkrwkurt4+state:results

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多