我有以下POJO / POGO:
class Person {
String firstName
String lastName
int age
// ... lots of other fields
}
Grails 2.3.6控制器:
class PeopleController {
List<Person> people = new ArrayList<Person>()
def populatePeople() {
// Add lots of people to the 'people' list.
}
def doSomething() {
populatePeople()
render(
view: "people",
model:[
people: people,
]
)
}
}
然后在GSP中:
<div id="peopleSelector">
<g:select name="people" from="${people}" />
</div>
当我运行我的应用时,我会使用<select>
获取com.me.myapp.domain.Person@398r4d99
元素 - 将值视为<option>
s。这显然是Grails没有将我的Person
实例反序列化为漂亮的打印格式。
我想要人们&#39;名字和姓氏显示为选择选项。因此,如果Person
列表中的people
个实例之一是:
Person smeeb = new Person(firstName: "Smeeb", lastNname: "McGuillocuty")
然后我会期待&#34; Smeeb McGuillocuty &#34;作为最终HTML中的选择选项。 我该如何做到这一点?
答案 0 :(得分:2)
将以下方法添加到Person
班级:
@Override public String toString() {
"$firstName $lastName"
}
并且,与实际问题有些无关,您可能必须在您的选项行中添加标识符以唯一标识该人。假设Person
类具有id
属性:
<g:select name="people" from="${people}" optionKey="id" />
以便获得以下HTML:
<select name="people" id="people">
<option value="123">Smeeb McGuillocuty</option>
:
官方文档的有用链接:http://grails.org/doc/latest/ref/Tags/select.html:
&#34; ..默认行为是对toString()
属性中的每个元素调用from
。&#34;
答案 1 :(得分:1)
如果你不能/不会牺牲&#34; toString()
用于在HTML中呈现,您还可以告诉g:select
如何呈现选项。通过在optionValue
中提供属性的名称(例如optionValue="fullName"
,然后提供String getFullName()
方法(注意瞬态,如果您传递GORM对象))或直接提供在GSP中:
<g:select name="person" optionKey="theId" optionValue='${{"$it.lastName, $it.firstName"}}' from="${people}" />