2011-01-14 15 views
2

私はGSPの第1コンボボックス(g:select)値の選択に第2コンボボックス(g:select)の値をロードしようとしています。第1コンボボックス(g:選択)に基づいて第2コンボボックス(g:選択)値を入力する方法は?

ドメインクラス:

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

ページがレンダリングされたときに2番目のコンボボックスにアイテムを設定しないで、1番目のコンボボックスに値が変更されたときにそのアイテムを設定します。

<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> 

は、選ばれた人に基づいて電話データ集団を記入すること(あなたはjqueryのまたはプレーンJavascriptを使用することができます)最初のコンボボックスでのonchangeイベントを追加します。ここでは、アクションにサーバーへの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を使用してください。 最初グラム内remoteFunctionを使用してください:のparamsとして現在の選択に渡し選択し、コールはあなたの第二グラムを含むテンプレートをレンダリング呼び出しコントローラ上のあなたの方法で今

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

次のようになります。選択。このg:selectは、コントローラーからのフィールド値またはパラメーターからの情報のいずれかを使用できます。これは

関連する問題