【发布时间】:2014-05-06 14:30:45
【问题描述】:
我在我的应用程序中使用 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" )
}
}
我尝试过用视图代替模板:“/views/layouts/partials/headerUser”,但这仍然不起作用。
总而言之,我希望我的第二个 ajax 调用将我的顶部栏替换为部分视图。我该怎么做?
感谢您的所有帮助。
编辑:
需要注意的是,控制器的名称与视图文件夹的名称无关。
【问题讨论】:
-
约定是用于站点网格布局的布局目录。我想你可以把任何你喜欢的东西放在那里,但是将它用于其他事情可能会在以后引起其他人的困惑。此外,您正在渲染 _headUser。通常 GSP 模板带有下划线前缀,而不是整个视图。也许你想要“render(template:'...')”而不是“render(view:'...')”。这不是这里真正的问题,但您可能希望将其视为单独的改进。我在单独的答案中描述了我认为真正的问题。我希望这会有所帮助。