2010-09-04 37 views
1

我有一個聯繫域類可以與多個組織關聯,這些組織也是域類。我想使用多選框以允許用戶選擇與當前聯繫人關聯的組織。選擇框填充了可用的組織。如何將選定的項目分配給我的聯繫人類中的組織列表?在Grails中我如何捕獲g中的多個選定項:select?

<g:select name="organizations.id" 
      multiple="multiple" 
      optionKey="id" 
      from="${com.ur.Organization.list()}" 
      value="${contact?.organizations}" /> 

以上就是我目前正在努力,雖然它確實填充組織的選擇似乎並不把選定的項目在我的組織領域。

感謝您的任何意見。

編輯: 合併來自krsjunk和omarello的評論。

下面是域類的縮寫版本。

class Contact{ 
    static searchable = true 
    static mapping = { 
     sort "lastName" 
    } 
    String firstName 
    String lastName 
    . 
    . 
    . 
    static belongsTo = [organizations:Organization, projects:Project] 
} 

class Organization { 
    static searchable = true 
    static mapping = { 
     sort "name" 
    } 
    String name 
    static hasMany = [contacts:Contact] 
} 
+0

嘗試更改名稱爲name =「organizations.id」 – Micor 2010-09-05 10:26:08

回答

5

也只是將名稱更改爲

<g:select name="organizations" multiple="multiple" 
      optionKey="id" 
      from="${com.ur.Organization.list()}" 
      value="${contact?.organizations}" /> 

應工作很好,只是試過了。

注意我的域名的定義是這樣的,(萬一你有什麼不同的

class Contact { 

    static constraints = { 
    } 

    static hasMany = [organizations:Organization] 

    String name 
} 


class Organization { 

    static constraints = { 
    } 

    static hasMany = [contacts:Contact] 
    static belongsTo = [Contact] 

    String name 
} 
+0

適用於單個選擇,但是當我選擇多個項目時,我得到一個異常,因爲select返回的是表示id的字符串列表,而不是對象列表。 – nathan 2010-09-05 14:35:31

+0

嗯,你有幾乎相似的域名def。如上所述。我只是嘗試了我用多個選擇創建的示例,它似乎工作正常,保存和檢索。你得到的例外是什麼? – omarello 2010-09-05 15:12:27

+0

啊,我的許多映射是從組織到聯繫人。聯繫人「屬於」組織。這似乎是問題所在。我會更新這個問題來更好地說明。無論如何,這是個例外。執行控制器[com.ur.ContactController]的action [save]導致的異常:groovy.lang.MissingMethodException:沒有方法的簽名:com.ur.Organization.get()適用於參數類型:(java.lang.String,可能的解決方案:get(java.lang.Object),getId(),getAt(java.lang.String),getAll(),ident(),getLog() Servlet:grails – nathan 2010-09-05 16:23:34

1

一個問題是,value="contact?.organizations"應該是value="${contact?.organizations}" - 不知道這是整個問題或沒有。 (還,屬性multiple=".."是沒有必要的,如果值是一個集合)

您可能還需要name="contact.organizations"name="contact.organizations.id"和其他屬性optionKey="id"

+0

進行了更改,但沒有運氣。我嘗試刪除多行,但這使得選擇單行選擇,所以我加回來。 – nathan 2010-09-05 00:28:42

+0

對不起,沒有設置一個例子,很難看到所有的片段......你嘗試value =「$ {contact?.organizations?.id}」(它應該提供一個ID集合,假設組織是來自hasMany關係) – user439828 2010-09-05 00:49:34

+0

你是對的,組織是hasMany關係中的一個列表。我嘗試使用$ {contact?.organizations?.id},但仍然沒有保存到列表中。我的「from」屬性是否可以返回組織的「toString」表示,它不會映射到組織列表? – nathan 2010-09-05 01:13:27

0

在新建的編輯域例如你沒有接觸和組織間的一種一對多的關係。你有一個一對多的組織聯繫。

所以

value="${contact?.organizations}" 

將永遠是一個單一的項目,從來沒有一個列表。

試圖選擇/分配多個組織到聯繫人永遠不會有效。

+0

我明白你的觀點。我將如何更新組織清單,以便它們包含對使用列表中所選組織的聯繫人的引用? – nathan 2010-09-05 18:29:30

+0

是的,提到的krsjunk是正確的,你定義聯繫人屬於一個組織,即只有一個。你需要定義一個有很多才能達到你想要的。由於聯繫人可以有多個組織關聯(根據您的初始請求) – omarello 2010-09-05 18:53:53

+0

如果您希望多個組織與特定聯繫人相關聯,則必須更改域模型,使其看起來更像他的答案中提供的一個omarello。 – user439828 2010-09-05 19:58:50

相關問題