在 View 上,我有隐藏字段:
<g:hiddenField name="pageName" value="savePage1"/>
然后在 Controller 上(当表单提交时)
params.pageName = savePage1
我也有功能savePage1()
我试图将字符串转换为函数,但不起作用:

params.pageName + "()"

如何使用给定的params.pageName调用该函数?

请帮忙,谢谢。

最佳答案

在您的示例中,您只是串联一个字符串,而不是调用方法。相反,您想要的是dynamic method invocation。假设savePage方法在this中:

String pageName = params.pageName
this."$pageName"()

这里的问题是您似乎在信任用户输入,因此您应确保pageName在批准的白名单中,否则您将自己暴露于一些主要漏洞中:
String pageName = params.pageName

if (!pageName in [ 'savePage1', 'savePage2' /* ... */]) {
    throw SomeException('Invalid pageName')
}

this."$pageName"()

尽管我认为它的性能要差一些,但是您最好也可以调用 Eval.me ,尽管首选上述方法。

10-06 14:08