ここで間違って多くを誤る:
<form action="${doStuffURL}" method='post' params="[keyId: ${mykey.id[i]}]"><g:actionSubmit value="doStuff"/></form>
使用しない理由:
<g:form name="something" controller="yourController" action="youraction">
をあなたは フォームのURLを生成するために持っている上で見ることができるように(多分あなたはあなたの理由を持っている)
コントローラ:
def doStuff = {
MyObject.doStuff("${params.keyId}")
}
Differences between action and methods in Grails controllers
だから、まず、なぜあなたは、コントローラを変更する必要がありますが、私の実際の懸念はここ MyObject.doStuff
あるMyObject.doStuff
静的メソッドですか?
これは、このような呼び出しがwould workの場合にのみ発生します。リンクには静的メソッドが表示されます。 hereと呼ばれ、executor.registerSenderFault
によって生成されているためにあなたを混乱させるかもしれません - 拡張性 - 同じことをする将来のクラスのために。これはEmailExecutor.registerSenderFault
でした。あなたが宣言したように、大文字のフルクラスです。
確かに小文字で始まるサービス通知である必要があります。
myObjectServive.doStuff(stuff)
上記の場合はMyObject
でいくつかの本当の方法であるとstatic
方法ではありません、あなたは、クラスに
MyObject myObject = new MyObject()
myObject.doStuff(stuff)
をinstantiate
する必要がありますが、サービスは、それはすべてそこにある存在する理由要するに、これはあります彼らはちょうど注射されて以来、あなたのすべての面倒を保存します。
私は個人的に私はそれが上記編集されたコメントのいずれかであるとは思わない
def doStuff = {
println "my params are $params "
//do you see keyId in there ?
//if so what is doStuff expecting as input a string ?:
// since if you do
println "${params.keyId.getClass()}"
//by default it will be a string you may need to change it from:
//myObjectService.doStuff("${params.keyId}")
myObjectService.doStuff(params.keyId as Long)
}
、それはまだあなたが何であるかをどのように/に関し、あなたには、いくつかの読書はE2A周り
を探してください示唆注射する。私は同様の問題を見てきました。私はあなたが新しいサービスを作り、新しいサービスをテストとして注入して再開することをお勧めします - あなたがそれを正しく注入していないと確信していないか、サービスが通常のサービスではなくabstract class
かもしれません。それとも....あなたが作成している可能性がありので、サービス名の大文字/小文字の宣言で同様の間違いのいくつかのフォームを作っています....
MyObjectnameService
をし、それらのかにN
でmyObjectNameService
差を利用して、それを呼び出しても、実際のサービスはmyObjectNameService
という小文字で作成されています。
テスト、これはすべて再びはるかに簡単な命名規則を使用して、テスト
grails create service MyService
として新しいサービスを作成し、ページのレンダリング後にあなたがHTMLソースを表示すると、このサービス
を使用して再度試して、持っています'myKey.id [i]'の値が返ってきたことを確認しましたか? – Gregg
はい、ちょうどChromeで検査して、データがあることを確認しました - params = "[keyId:8]" – gibsonsg
私は自分の投稿を読むべきです。 .. myObjectService.doStuff( "$ {params.keyId}")宣言の大きな違いは小文字で、すべての違いがあります – Vahid