我的模特:
class Fizz {
String bimder
Buzz buzz
}
class Buzz {
int bupo
}
在我的控制器中,我正在维护Fizz
个实例的列表:
class MyController {
static List<Fizz> fizzes = []
def index() {
render(view: "display_buzzes", model: fizzes)
}
}
在我的display_buzzes.gsp
:
<!--
Here I want to iterate through all the fizzes, extract their buzz
instance, and inject that buzz into a list to display as an option
inside this select.
-->
<g:select name="buzzes" from="${???}" />
因此,在<select>
内,我希望Grails以某种方式从Buzz
列表中提取fizzes
个实例的“子列表”,并显示嗡嗡声。我怎么能这样做?
答案 0 :(得分:3)
from="${fizzes*.buzz}"
应该这样做。
但是(与实际问题无关)你设置控制器的方式很容易出错。
默认情况下,控制器是单例(在较新版本的Grails中),所以
static List<Fizz> fizzes = []
将始终保持跨请求的状态。如果那是你不想要的,那么在action方法中获取Fizz
。例如:
class MyController {
def index() {
List<Fizz> fizzes = Fizz.all
render( view: "display_buzzes", model: [fizzes: fizzes] )
}
}
答案 1 :(得分:0)
解决问题的关键是使用collect
来收集Buzz
个实例的列表。这是一个简单的Groovy示例,说明它是如何使用的:
class Fizz {
String bimder
Buzz buzz
}
class Buzz {
int bupo
}
List<Fizz> fizzes = [
new Fizz(bimder: '1', buzz: new Buzz(bupo: 1)),
new Fizz(bimder: '2', buzz: new Buzz(bupo: 2)),
new Fizz(bimder: '3', buzz: new Buzz(bupo: 3)),
new Fizz(bimder: '4', buzz: new Buzz(bupo: 4))
]
println fizzes.collect{it.buzz}
现在,您需要使用以下内容<g:select>
:
<g:select name="buzzes" from="${fizzes.collect{it.buzz}}" />
以上内容将为您提供从您的Fizzes列表中收集的嗡嗡声列表。享受!