在 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
,尽管首选上述方法。