2011-01-14 56 views
2

我试图在第一个组合框(g:select)的GSP值中加载第二个组合框(g:select)值。如何在第一个combobox(g:select)的基础上填充第二个combobox(g:select)值?

域类:

class Person {  
    String name 
    static hasMany = [telephones:Telephone] 
} 

class Telephone {  
    String tNumber 
    Person person 

    static belongsTo = [person:Person] 

} 

GSP:

<td> 
<g:select id="person" name="selectedPersonId" from="${Person.list(sort:name, order:asc)}" value="name" optionValue="name" optionKey="id" noSelection="['0':'--Select--']" /> 
</td> 
<td> 
<g:select id="telephone" name="selectedTelephoneId" from ="${person.telephones}" value="tNumber" optionValue="tNumber" optionKey="id" noSelection="['0','--Select--']"/> 
</td> 

我怎样才能做到这正常吗?

回答

3

当页面呈现时,请勿在第二个组合框中填充项目,并在第一个组合框中存在值更改时填充它。

<td> 
<g:select id="person" name="selectedPersonId" from="${Person.list(sort:name, order:asc)}" value="name" optionValue="name" optionKey="id" noSelection="['0':'--Select--']" /> 
</td> 
<td> 
<g:select id="telephone" name="selectedTelephoneId" from ="${[]}" value="tNumber" optionValue="tNumber" optionKey="id" noSelection="['0','--Select--']"/> 
</td> 

添加第一个组合框onchange事件(你可以使用jQuery或纯JavaScript)的,将根据选择的人填写的电话数据的人口。在这里,你可以使用一个AJAX调用服务器动作,是这样的:

def getTelephones = { 
    def telephoneInstanceList = Telephone.findAllByPerson(Person.get(params.personId)) 
    def telephones = telephoneInstanceList.collect {[id: it.id, phone: it.tNumber]} 
    render telephones as JSON 
} 
2

首先不要使用表格来使用div。 使用第一个G内remoteFunction:选择传入当前选择的参数,可以在调用看起来像

"${remoteFunction(action: 'methodName', update: 'DivToUpdate', params: '\'id=\'+this.value')}" 

现在在你,你叫渲染到包含你的第二个g的模板,在控制器上的方法:选择。这个g:select可以使用来自控制器的字段值或来自参数的信息。希望这可以帮助

相关问题