Grails/GSP:突破<;g:每个>;
有没有办法摆脱困境?我有一个页面,在这个页面中,我正在遍历一个列表,我必须确保选中一个复选框,如果它是存储在DB中的值 为了更清楚一些,请考虑一下:Grails/GSP:突破<;g:每个>;,grails,each,gsp,break,Grails,Each,Gsp,Break,有没有办法摆脱困境?我有一个页面,在这个页面中,我正在遍历一个列表,我必须确保选中一个复选框,如果它是存储在DB中的值 为了更清楚一些,请考虑一下: <g:each in=${list1}> <g:each in=${list2}> <g:if test="${list1.id == list2.id}"> <input type="checkbox" ... checked="checked" />
<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(…)(即所选值)
在g:each中,我需要用一个复选框显示所有列表1(因此,内部列表后面的“…”),但我需要确保相应地选中列表2中的列表(保存到DB的用户选择项)(if语句)
现在,如果检查状态在第一次迭代中被更改,我需要从内部每个。。。有办法吗
谢谢 不,不是每个子句 我只需要编写我自己的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
}
}
def eachCheckedItem={attrs,body->
def list1=attrs.list1
def list2=attrs.list2
list1.findAll{list2.contains(it)}.each{
out如果我理解正确,你需要这样的东西:
<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 test="${it.id==elem1.id}" in="${list2}">...</g:any>
...
没有g:any标记,但正如Ted指出的,编写一个标记很容易(留给读者作为练习)。然后,您可以将内部标记简化为如下内容:
<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 test="${it.id==elem1.id}" in="${list2}">...</g:any>
。。。
您应该在模型中执行此操作,这样在视图中就只有一个简单的循环。然后,只需让控制器调用Domain.findMyList()即可或者随便什么。对于搜索原始海报问题答案的谷歌人来说,gsp中没有中断命令。这里有一些更好的回答,在我看来,最好的一个是尝试使用.findAll{..},在“中断”之前只查找您希望处理的设置
啊,好吧……我会进一步调查的。谢谢!!