在 gsp 上创建自定义 URL 映射的 URL 字符串

Creating URL String of a Custom URL Mapping on gsp

我已经修改了某个 Grails 的默认 URL 映射 Controller:

BankRemittanceController.groovy

class BankRemittanceController{
    def view(String bankCode, String refNo) {
        ...
    }
}

UrlMappings.groovy

class UrlMappings {
    ...

    /*
     * Will accomodate the following URLs
     *
     * /project/remittance/bank/
     * /project/remittance/bank/hsbc/
     * /project/remittance/bank/hsbc/8959-87s-777-EI-02
     */

    "/remittance/bank/$bankCode?/$refNo?"{
        controller={"bankRemittance"}
        action=[GET:"show"]
    }

    ...
}

我已经测试了这些 URL 并且有效。问题是当我尝试在 .gsp 上动态生成 URL 字符串时,它会生成默认的 URL:

<script>
    var redirectURL = "${g.createLink(controller: "remittance", action: "view")}"

    // The URL generated here is still:
    // /project/bankRemittance/view
    // 
    // instead of the mapped URL in UrlMappings.groovy:
    // /project/remittance/bank
    //
</script>

如何生成预期的 URL 字符串?

我不明白为什么在映射中调用不存在的操作 'show'。 我已将其更改为:action=[GET:"view"]

如果您预期的 url 是:/project/remittance/bank, 你可以使用:${g.createLink(控制器:"remittance",动作:"bank")} 或者:${g.createLink(uri: "/remittance/bank")}

首先,更改定义映射的声明。来自

"/remittance/bank/$bankCode?/$refNo?"{
    controller={"bankRemittance"}
    action=[GET:"show"]
}

设为:

name mappingName: "/remittance/bank/$bankCode?/$refNo?"{
    controller={"bankRemittance"}
    action=[GET:"show"]
}

然后在 .gsp 上声明它时使用 createLink() mapping attribute 而不是 controlleraction:

<script>
    var redirectURL = "${g.createLink(mapping: "mappingName")}"
</script>

如果要传递两个可选参数(bankCoderefNo),请使用 createLink() params 属性:

<script>
    var redirectURL = "${g.createLink(mapping: "mappingName",
        params: [bankCode: "...", refNo: "...")}"
</script>