我的主要問題是在一個動態表單中管理一對多關係時處理pramas地圖,以及處理一對多時通過動態表單編輯/更新域對象。我的問題的輸入如下。在grails中處理來自動態表單的一對多關係的參數
我設法破解了一個表單,允許我在一個Dynamic表單中創建下面顯示的域對象,因爲創建電話號碼並將其分配給聯繫人的單獨表單沒有意義,在我的應用程序中以一種形式創建所有內容是有意義的。我成功地實現類似的東西我都問我Previous Question(感謝誰幫助了人)我基本上成功地從「PARAMS」地圖獲取值和分析他們對我自己和
class Contact{
String firstName
String lastName
// ....
// some other properties
// ...
static hasMany = [phones:Phone]
static mapping = {
phones sort:"index", cascade: "all-delete-orphan"
}
}
class Phone{
int index
String number
String type
Contact contact
static belongsTo = [contact:Contact]
}
手動創建域對象和關聯。即我沒有使用在默認的腳手架使用相同的邏輯,即
Contact c = new Contact(params)
等....,我只是通過所有的PARAMS循環和手工製作的我的域對象並保存它們,一切順利罰款。
我的控制器有看起來像這樣的(這是剝離下來,只是展現出點)的代碼塊
//create the contact by handpicking params values
def cntct = new Contact()
cntct.firstName = params.firstName
cntct.lastName = params.lastName
//etc...
//get array of values for number,type
def numbers = params['phone.number']
def types = params['phone.type']
//loop through one of the arrays and create the phones
numbers.eachWithIndex(){ num, i ->
//create the phone domain object from
def phone = new Phone()
phone.number = num
phone.type = types[i]
phone.index = i
cntct.addToPhones(phone)
}
//save
我的問題如下:
- 什麼是最好的做法在這種情況下,如果使用Command對象,在這種情況下會使用Command對象,如果是的話,我可以在哪裏找到關於此的更多信息,我在搜索過程中發現的所有示例都與一對一關係有關,我無法找到示例一對多?
- 在這種情況下,處理手機關係的最佳方式是在編輯聯繫人對象時添加/刪除手機。我的意思是創建邏輯很簡單,因爲我必須總是在保存時創建新手機,但在處理更新聯繫人時,用戶可能已經刪除了手機和/或編輯正在退出的手機和/或添加了一些新手機。現在我所做的只是刪除聯繫人所擁有的所有電話,並根據表單發佈的內容重新創建它們,但我認爲這不是最好的方式,我也不認爲現有的並與發佈的值進行比較,並做一個手動差異是最好的方法來做到這一點,是否有最佳做法如何處理?
謝謝,希望問題很清楚。
[編輯]只是爲了更多的信息,電話信息,可以添加和使用JavaScript(jQuery的)形式在[/編輯]
謝謝您分享您的搜索。非常好!(+1) – 2010-08-20 15:14:12
我已經發布了關於我如何完成電話簿示例的指南,主要基於上述文章。希望它會有所幫助。 http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/ – omarello 2010-08-21 10:55:19
現在感謝您分享您的知識。我將通過使用AutoPopulatingList來嘗試它。只是爲了好奇:Grails滿足你的需求嗎? – 2010-08-21 22:23:40