gpt4 book ai didi

Grails - 将数据从 View 传递到 Controller

转载 作者:行者123 更新时间:2023-12-02 15:49:43 25 4
gpt4 key购买 nike

我正在尝试将 Param 数据从 View 传递到 Controller ,但遇到了麻烦。这是我目前正在尝试做的事情。

看法:

<form action="${doStuffURL}" method='post' params="[keyId: ${mykey.id[i]}]"><g:actionSubmit value="doStuff"/></form>

Controller :
def myObjectService //inject service object

def doStuff = {
myObjectService.doStuff("${params.keyId}") //this blows up because it's value of NULL
myObjectService.doStuff(8) //this works fine
}

它进入方法 block 是因为错误日志显示“方法 MyObject.doStuff() 的签名不适用于参数类型:值:[null]。”另外,我可以从另一个字段中看到 ${mykey.id[i]} 数据,因此数据肯定在 View 中。

如何让 Controller 读取参数数据?

谢谢!

最佳答案

这里有很多错误:

<form action="${doStuffURL}" method='post' params="[keyId: ${mykey.id[i]}]"><g:actionSubmit value="doStuff"/></form>

为什么不使用:
<g:form name="something" controller="yourController" action="youraction">
正如您在上面看到的,您必须生成
表单网址(也许你有你的理由)

Controller :
def doStuff = {
MyObject.doStuff("${params.keyId}")
}

Differences between action and methods in Grails controllers

所以首先为什么你应该改变 Controller ,但我真正关心的是 MyObject.doStuff
MyObject.doStuff静态方法?

因为只有当这样的电话 would work .该链接显示了一个静态方法。被调用 here它可能会因为它通过 executor.registerSenderFault 调用它而使您感到困惑由于它是如何生成的 - 可扩展性 - 对于 future 做同样事情的类。这可能是 EmailExecutor.registerSenderFault这是您声明的大写全类。

当然它应该是一个以小写字母开头的服务通知。
myObjectServive.doStuff(stuff)
如果上面是 MyObject 中的一些真实方法并且不是 static方法那么你需要 instantiate
MyObject myObject = new MyObject()
myObject.doStuff(stuff)

但简而言之,这就是服务存在的原因,因为它们只是被注入(inject),所以它可以为你省去所有的麻烦。

我建议你四处看看

E2A
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)
}

就我个人而言,我不认为这是任何上述编辑的评论,它仍然与您注入(inject)的方式/内容有关。我见过类似的问题。我建议您创建一个全新的服务并注入(inject)新服务作为测试并重新开始 - 不相信您是否正确注入(inject)了它,或者如果您是该服务可能是一些 abstract class而不是正常的服务。或者....您在服务名称的大写/小写声明中犯了某种形式的类似错误,因此您可能创建了:
MyObjectnameService并使用 myObjectNameService 调用它 N 的差异在那些或.... 更糟糕的是,您创建了实际服务为 myObjectNameService用小写的名字。

使用更简单的命名约定再次测试这一切,并创建一个新服务作为测试
grails create service MyService

并再次尝试使用此服务

关于Grails - 将数据从 View 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com