私のページには複数選択があります。ユーザーは、要素をリストに追加したり、1 つまたは複数を選択して削除したりできます。
params.selectName を介して選択の値を取得すると、選択された値のみを受け取ります。これがデフォルトの動作であることは理解していますが、選択した要素だけでなく、それらすべてが必要です。
サーバーにデータを送信するたびにすべての要素を選択したくありません。誰かがより良い解決策を持っていますか? ありがとう。
私のページには複数選択があります。ユーザーは、要素をリストに追加したり、1 つまたは複数を選択して削除したりできます。
params.selectName を介して選択の値を取得すると、選択された値のみを受け取ります。これがデフォルトの動作であることは理解していますが、選択した要素だけでなく、それらすべてが必要です。
サーバーにデータを送信するたびにすべての要素を選択したくありません。誰かがより良い解決策を持っていますか? ありがとう。
このタグが採用するアプローチ<g:checkBox>
は、チェックボックスと同じ名前で先頭にアンダースコアを追加した隠しフィールドを作成することです。ここで同様のトリックを使用できます。つまり、に新しいフィールドを追加するたびに、同じ値を持つ(たとえば) という名前の非表示フィールドも追加し<option>
ます。次に、コントローラーでとの差をとって、リストから選択されていないオプションを取得できます。<select>
selectName_options
params.list('selectName')
params.list('selectName_options')
これは、単純な問題に対する少し複雑な解決策ですが、私の現在のプロジェクトでは、同じ問題があり、@cdeszaq が説明するように解決しました。
クラス のオブジェクトがアイテムFoo
のコレクション ( bars
) を持ち、それぞれが を持ち、それを表現として出力すると仮定すると、 でこれを行います。Bar
Bar
String name
toString()
FooController
def removedItems = fooInstance.bars.findAll {
!params.bars.collect { it.key }.contains(it.name)
}
if(removedItems){
removedItems.each {
fooInstance.removeFromBars(it)
}
}