2013-02-28 2 views
0

Вместо сохранения измененного класса домена, я хочу создать его новый экземпляр с внесенными мной изменениями.создание нового экземпляра класса домена, не сохраняющего

def update = 
{ 
     def VariantInstance = Variant.get(params.id) 
     VariantInstance.properties = params 
     def NewVariantInstance = new Variant() 
     //Now Assign Variant Instance new Values 
     NewVariantInstance.Name = VariantInstance.Name 
     NewVariantInstance.LocationID = VariantInstance.LocationID 
     NewVariantInstance.aliases = VariantInstance.aliases 
     NewVariantInstance.closeToBoundary = VariantInstance.closeToBoundary 


     if (VariantInstance) { 
     if (!VariantInstance.hasErrors() && !NewVariantInstance.hasErrors()) { 
      println("no errors") 
      try { 
      NewVariantInstance.save() 
      } 
      catch (Exception ex) 
      { 
       println(ex.toString()) 
      } 


      flash.message = "${message(code: 'default.updated.message', args: [message(code: 'Variant.uniqueIdentifyingName', default: 'Variant'), VariantInstance.id])}" 
      redirect(action: "list") 
     } 

} 

Однако, когда я бегу через этот A) Новая версия не сохраняется и Б) NewVariantInstance не имеет идентификатор. Мысли?

+2

Ваши имена переменных странны. В Java типично использовать первую букву капитала для имен классов, но имена переменных нижнего регистра. Это помогает различать вызовы методов static и instance. –

ответ

2

Ваши VariantInstance и NewVariantInstance никогда не проверяются, поэтому hasErrors() всегда будет возвращать false. Вам нужно перейти от

!VariantInstance.hasErrors() && !NewVariantInstance.hasErrors() 

в

VariantInstance.validate() && NewVariantInstance.validate() 

Вполне вероятно, что NewVariantInstance имеет ошибку проверки, поэтому save() не увенчались успехом.