Grails Controller从布局文件夹渲染视图

时间:2014-05-06 14:30:45

标签: jquery ajax grails

我在我的应用程序中使用spring security和twitter bootstrap。我有这个标题栏,其中包含用户名和密码以及登录按钮的字段。当我单击登录按钮时,我会进行ajax调用以验证用户身份。当这返回成功时,我创建第二个ajax调用以呈现不同的标题栏。两个标题栏在我的布局文件夹中都是部分视图的形式,如下所示:

-Views
    - layouts
        - partials
            - _headerBasic.gsp
            - _headerUser.gsp
        - main.gsp
    - project

我的ajax电话是这样完成的:

<script type="text/javascript">
$(document).ready(function(){
    $("#LoginButton").click(function(){
        $.ajax({
            url: 'http://localhost:8080/XXXXX/j_spring_security_check',
            type: 'POST',
            data: {
                j_username: $("#username").val(),
                j_password: $("#password").val()
            },
            success: function(data){
                $.ajax({
                    url: 'http://localhost:8080/XXXXX/layout/renderNavBarLoggedIn',
                    type: 'POST',
                    success: function(data){
                        $("#navbar").empty();
                        $("#navbar").html(data);
                    },
                    error: function(errorThrown){
                        alert('Fail!1');
                    }
                });
            },
            error: function(errorThrown){
                alert('Fail!2');
            }
        });
        return false;
    });
});

我的控制器是这样的:

class LayoutController {
    def renderNavBarLoggedIn(){
        render ( view: "/views/layouts/partials/_headerUser" )
    }
}

我尝试过而不是查看模板:&#34; / views / layouts / partials / headerUser&#34;但那仍然没有用。

所以回顾一下,我希望我的第二个ajax调用用局部视图替换我的顶部栏。我该怎么做呢?

感谢您的帮助。

编辑:

请注意,控制器的名称与视图文件夹的名称无关,这一点非常重要。

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

class LayoutController {
    def renderNavBarLoggedIn(){
        render ( view: "/layouts/partials/_headerUser" )
    }
}

请注意,我遗漏了路径的“views”部分。 “views”是默认的root,所以如果指定“/ views / ...”,系统将查找“/ views / views / ...”。