2010-12-28 14 views
8

arasındaki bağlantı nedir? Bu soru, another question benimki sorunudur. Bu soruda,işlevinin non-persistent etki alanı sınıfı için the instruction, bölüm 7.5'i uyguladıktan sonra bile çalışmadığı bir durumla karşılaşıyorum.validate() ve hasErrors()

Victor'un ardından validate() yöntemini kullanarak sorunu çözdüm, ancak neden işe yaramadığını anlamıyorum. Grails belgeleri, hasErrors() işlevinden önce validate() yöntemini çağırmanız gerektiği konusunda hiçbir şey söylemiyor gibi görünüyor. Bu nasıl olabilir?

cevap

9

O validate bir nesneyi istemeden önce çağrılacak ihtiyacı olacağını bana mantıklı geliyor olmadığını o (yorganın altında validate çağrıları uygun alan nesneler, ya da save) hasErrors. Bu bağlamda geçerli kılmak, "bu nesnenin geçerli olup olmadığını kontrol et ve değilse hatalarını göster" anlamına gelir. Alternatif olarak, GORM uygulaması, bir nesne üzerinde herhangi bir değişiklik yapıldığında, her ne zaman benim için daha az arzu edilen bir davranış olacağına dair, her defasında bir değişiklik yapıldığında, bu sık sık ve gereksiz bir işin yapılmasını gerektireceğinden (bu kısıtlamaların bir kısmı), validate numaralı telefonu aramak zorunda kalacaktır. çok iş gerektirir).

Bölüm 7.2'nin başlangıcı oldukça açık bir şekilde belirtilmektedir: "Bir etki alanı sınıfını doğrulamak için herhangi bir örnekte doğrulama yöntemini kullanabilirsiniz". Aynı zamanda "Grails içinde esas olarak doğrulama 2 fazı vardır, ilk aşama istek parametreleri gibi bir örneğe bağladığınızda ortaya çıkan veri bağlamasıdır ... Bu noktada hataları nedeniyle hatalar özelliği zaten olabilir. tip dönüştürme (Dizeleri Tarihlere Dönüştürme gibi) Bunları kontrol edebilir ve Hatalar API'sını kullanarak orijinal giriş değerini elde edebilirsiniz. ... Doğrulama için ikinci aşama, doğrulama veya çağrıyı çağırdığınızda gerçekleşir. değerler, tanımladığınız kısıtlamaları atar. "

documentation for hasErrors da bundan bahseder. documentation site numaralı telefondayken soldaki gezinme çerçevesindeki yöntem çağrısını bularak buna erişebilirsiniz. Her zaman daha fazla açıklayıcı kullanıcı kılavuz sayfalarının yanı sıra, daha fazla ayrıntı verdikleri için, bunlara bakmanızı öneririm. Here's the page for the validate method da.

Doğrudan validate numaralı telefonu arayarak hiçbir zaman sorun yaşamadım - bana göre çok açık ve tüm işin yapıldığı noktayı seçebilirim ve doğrulama işleminin gerçekleşmesi için hazırım. Bu davranışı her yerde değiştirebileceğim bir seçenek göremiyorum, ancak validate'un otomatik olarak veya belirli koşullar altında aranmasını istiyorsanız, belki de bazı Groovy meta programlama sihrini sınıfınıza invokeMethod ekleyerek kullanabilir ve geçmeden önce validate'u arayabilirsin belirli aramalar. here ve here'a bakın. (Yine de bunu öneriyorum emin değilim! Sınıfınızın artık GORM doğrulama çerçevesinde kullanılmasına bağlı olacağını unutmayın; aksi halde validate yöntemi başka şekilde mevcut olmayabilir).

+0

Dikkatli cevabınız için çok teşekkürler, şimdi anlıyorum. –

+2

Bu arada ... Peter Ledbrook (mükemmel Grails in Action kitabının yazarlarından biri), GORM Gotchas hakkında çok sayıda makale yazdı. işler: [bölüm 1] (http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/), [bölüm 2] (http://blog.springsource.com/2010/ 07/02/gorm-gotchas-part-2 /) ve [bölüm 3] (http://blog.springsource.com/2010/07/28/gorm-gotchas-part-3/). –