2012-02-24 5 views
0

これは持続性とドメインオブジェクトの問題である可能性があります。だから私は人に追加できるマニュアルノートのリストを持っています。私のPersonクラスは、(私は永続性を無視する過渡状態でオブジェクトをラップしました)このようになります。ドメインオブジェクトの文字列リスト - オンザフライで追加する

class Person { 
... 
List<String> notes = new ArrayList<String>() 
... 
} 

私はノートを持つ人を更新すると(ビュー上のテキストフィールドノートを追加することができるようになります)、私が欲しいです人に接続されたアレイのリストに新しいノートを追加するような単純な何かをする:

class PersonController { 
... 
def update() { 
    def contactInstance = Contact.get(params.id) 
    if (!contactInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'contact.label', default: 'Contact'), params.id]) 
     redirect(action: "list") 
     return 
    } 

    if (params.version) { 
     def version = params.version.toLong() 
     if (contactInstance.version > version) { 
      contactInstance.errors.rejectValue("version", "default.optimistic.locking.failure", 
         [message(code: 'contact.label', default: 'Contact')] as Object[], 
         "Another user has updated this Contact while you were editing") 
      render(view: "edit", model: [contactInstance: contactInstance]) 
      return 
     } 
    } 

    contactInstance.properties = params 

    /** 
    * Check for inactive - Then flag with user and date tag 
    */ 
    if(params.isActive == null) { 
     DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm"); 
     Date date = new Date(); 
     contactInstance.properties.isActiveNote = "Made inactive by " + session.user + " on " + dateFormat.format(date) + "." 
    } 

    /** 
    * Date stamp of the note itself 
    */ 

    if(params.notes.equals("")) {} 
    else { 
     DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm"); 
     Date date = new Date(); 
     //contactInstance.properties.notes = contactInstance.properties.notes + " " + params.notes + " - (" + dateFormat.format(date) + " " + session.user + ");" 
     contactInstance.allThese.add(contactInstance.properties.notes) 
     println(contactInstance.allThese) 
    } 


    if (!contactInstance.save(flush: true)) { 
     render(view: "edit", model: [contactInstance: contactInstance]) 
     return 
    } 

    flash.message = message(code: 'default.updated.message', args: [message(code: 'contact.label', default: 'Contact'), contactInstance.id]) 
    redirect(action: "show", id: contactInstance.id) 
} 
... 
} 

私のGSPからアップデートするコール:

<g:actionSubmit class="save" action="update" value="${message(code:'default.button.update.label', default: 'Update')}" /> 

しかし、ただの配列を格納しているようですシングルノート。 Grailsのドメインオブジェクトやコレクションに永続性の問題はありますか?それは私の目的のために非常によく問題になることができます!

ありがとうございました。

+0

この例では、著者と書籍の1対多の関係を使用しています。http://www.2paths.com/2009/10/01/one-to-many-relationships-in-grails-forms/私は欲しい似たようなことをするが、明らかにブックオブジェクトではない。代わりに、String型のメモを使用したいと思います。 – user82302124

答えて

0

ビューに複数の<input>フィールドまたは<textarea>の名前が含まれている場合(「注」、Domainクラスのフィールド名と一致するように)、Grailsは自動的に値をnotesアレイにバインドします。

また、新しいパラメータparams.list()を調べると、リクエストパラメータを繰り返し処理し、配列に個別に追加することができます。

+0

私は明確にすべきです - 簡単にするためにここに私のリストをメモに改名しました。今のところ本当にallTheseという名前です。 – user82302124

+0

リクエストに「allThese」という名前のパラメータ(複数のパラメータ)、または「newNote」だけが含まれていますか?そして、あなたのドメインオブジェクトは "newNote"という名前のトランジェントを持っていますか?そうでない場合は、単に 'person.notes.add(person.properties.newNote)'を 'person.notes.add(param.newNote)'に変更する必要があります。 –

+0

私の質問が更新されました。私には何も要求はありません。私は、私が更新している連絡先のIDを含むアップロードするための呼び出しで隠されたフィールドを持っています。 – user82302124

関連する問題