2011-01-14 110 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可以使用來自控制器的字段值或來自參數的信息。希望這可以幫助

相關問題