我为其中一个网页创建了一个网址自定义控制器:
class SummaryController {
def show(String param1, String params2) {
...
}
...
}
以及相应的URL映射。
class UrlMappings {
static mappings = {
...
name special:"/dir1/subdir/$param1/$param2/summary"{
controller="summary"
action="show"
}
...
}
}
当我在浏览器的地址栏中输入地址时,它工作得很好。现在我想要的是将该URL保存到javascript变量中。但是在创建URL字符串时会产生错误:
<script>
var URL =
"${ g.createLink(mapping: "special", params: "[param1: '...', param2: '...']") }"
</script>
消息:无法为映射
[/dir1/subdir/(*)/(*)]
和参数[{controller=summary, action=show}]
创建网址。参数[param1]
是必需的,但未指定!
虽然以下代码(用<body>
编写时)有效:
<body>
....
<li>
<g:link mapping="special" params="[param1: '...', params2: '...']" />
Link
</g:link>
</li>
..
</body>
与g:link
无关的g.createLink()
是什么?有没有办法将自定义URL值分配给JavaScript变量?这是Grails 2.4.4。
答案 0 :(得分:3)
您正在传递String
参数,而不是Map
。请记住,${}
内部应该是有效的Groovy代码,与在groovy类中使用的代码相同。
试试这个:
<script>
var URL =
"${ g.createLink(mapping: 'special', params: [param1: '...', param2: '...']) }";
</script>
类似于:
def g = ...
g.createLink(
mapping: 'special',
params: [
param1: '...',
param2: '...'
]
)
// your code was passing a string instead:
g.createLink(
mapping: 'special',
params: "[param1: '...', param2: '...']"
)