2016-04-12 16 views
0

Merhaba argüman türleri için geçerlidir:İmza yok ben bu hizmeti

def insertAction(int Id, String Name){ 
     def sql = new Sql(dataSource) 
     sql.execute("INSERT INTO mn (id, name) VALUES ($Id,$Name)") 
    } 

bu kontrolör:

def save() { 
     println params 
     [contact: contactListService.insertAction(params.id,params.Name)] 
     redirect action: "create" 

Ve yeni bir giriş oluştururken bu hatası alıyorum

yöntemin bir imza: contactlist.ContactListService.insertAction() değişken türleri için geçerli olan: (null, java.lang.String) değerleri: [boş, das] olası çözümler: insertAction (int, java.lang.String), lis taction()

+0

Değişken adlar veya parametreler için büyük harf kullanmayın –

cevap

0

Eh, gibi hata öneriyor.
Sen int olmak için ilk parametre tanımlı, fakat bunu null verir.
null ancak bir basit tür gibi int için, herhangi bir nesne için alınabilir. Ya yöntem parametrenizi Integer (veya açık bir tür belirtmeyecek şekilde def) gibi bir nesne olarak değiştirin ve yönteminizin içinde null olup olmadığını kontrol edin veya değerlerini yönteme vermeden önce params'nu kontrol edin.

+0

Bazı şeyleri değiştirdim ama şimdi şunu alıyorum Yöntem yok: contactlist.ContactListService.insertAction() argüman türleri için geçerlidir: (java.lang.String, java.lang.String) değerleri: [3, h] olası çözümler: insertAction (int, java.lang.String), listAction() – Andrew

+0

iyi hata anlaşılacağı hala gibi. Metodunuzu bir "int" ve bir "String" bekleyecek şekilde tanımladınız, ancak bunu iki "String" olarak tedarik ediyorsunuz. İlk parametrenizi int '' params.id int '' ile vermeden önce veya '' String, String' veya 'def, String' için yöntem imzanızı değiştirmeden önce int 'ye dönüştürün. – Vampire

+0

Değiştirdim ve beklediğim hatayı aldım. kimliğim veritabanımda bigint. HATA: "id" sütunu bigint türündendir, ancak ifade türden bir karakter tipidir. İpucu: İfadeyi yeniden yazmanız veya yayınlamanız gerekir. – Andrew