如何在javascript中使用grails $ {createLink}

时间:2013-09-12 09:38:26

标签: javascript grails

我有一个javascript函数如下

function GetSelectedItem()
{
    var e = document.getElementById("country");
    var strSel =  e.options[e.selectedIndex].value;
    alert(strSel);
    var url = "${createLink(controller:'country', action: 'wholeTestUnits', id: strSel)}"
    alert(url);
 }

当我点击

之类的提交按钮时,我想转到该网址操作
<button class="submit_small" onClick="GetSelectedItem();">
    <span><g:message code="default.button.submit.label" /></span>
</button>

${createLink}无效。

6 个答案:

答案 0 :(得分:3)

更好的方法是在您的GSP中不需要JavaScript代码,如下所示:

<button class="submit_small" onClick="GetSelectedItem();" data-url="${createLink(controller:'country', action: 'wholeTestUnits')}">
    <span><g:message code="default.button.submit.label" /></span>
</button>

function GetSelectedItem() {
    var button = event.target;
    var e = document.getElementById("country");
    var strSel =  e.options[e.selectedIndex].value;
    var url = button.getAttribute("data-url") + "/" + strSel;
}

答案 1 :(得分:1)

我认为你有服务器端/客户端问题。 createLink在服务器上运行,JS在客户端上运行......

尝试:

var url = '${createLink(controller:'country', action: 'wholeTestUnits')}' + strSel ;

答案 2 :(得分:1)

正如我想的那样,你在链接中没有获得strSel的价值。 你可以试试这个。

function GetSelectedItem()
{
        var e = document.getElementById("country");
        var strSel =  e.options[e.selectedIndex].value;
        alert(strSel);
        var url = "${grailsApplication.config.grails.serverURL}/country/wholeTestUnits/" + strSel
        alert(url);
}

答案 3 :(得分:0)

您可以构建自己的URL并使用该URL,而不是使用createLink。但是,您必须注意控制器名称中的大写字母。

var url="${ createLink(controller:'testcontroller', action:'getData') }";

相当于

var url = "/testcontroller/getData;

如果你想将javascript中的参数传递给控制器​​,你可以这样做。

var url = "/testcontroller/getData?arg0=" + arg0 + "&arg1=" + arg1;

要在控制器中提取参数,请使用params关键字。 因此,要在控制器中打印参数,请执行以下操作:

println params.arg0
println params.arg1

答案 4 :(得分:0)

    --in gsp file--
   <a href="#" onclick="callAjax('${createLink(controller:'shift',action: 'addShift')}');" >Add/Edit Shift</a>


    --in js file--
    function callAjax(path){
    //path->/shift/addShift
       var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                    if (this.readyState == 4 && this.status == 200) {
                        document.getElementById("updateContent").innerHTML = this.responseText;
                    }
                };
                xmlhttp.open("GET", path, true);
                xmlhttp.send();
      }

答案 5 :(得分:0)

尝试: var url =“ $ {createLink(controller:'country',action:'wholeTestUnits',params:[id:strSel],absolute:true)}}”