我想将我的数据库User对象从控制器传递到.gsp页面,以便我可以在视图中使用它的属性。这是控制器代码:
def login(String username, String password){
def userList = getUserListFromDatabase();
User usr = new User(username: username, password: password);
println usr.username + ' ' + usr.password;
username = params?.username;
password = params?.password;
println userList.size();
for(User u : userList){
println 'username: ' + u.username + ' password: ' + u.password;
if(u.password.equals(password) && u.username==username){
User user = u;
flash.user = u;
render (view: 'login.gsp');
//debug
println 'user.username: ' + user.username;
return;
}
}
render 'login failed';
}
这就是我想如何在视图中显示它:
</head>
<g:set var="now" value="${new Date()}"/>
<g:set var="user"/>
<body>
Login successful!<br/>
User: ${user?.username}<br/>
</body>
将具有所有属性的对象传递给视图的正确方法是什么?我无法达到目的。
答案 0 :(得分:2)
我真的会在这里重构你的逻辑。它正在获取所有用户数据并循环以找到正确的用户。如果您的用户表很大,您的登录系统将会变慢,因为它将遍历每个用户。
def login(String username, String password){
// def userList = getUserListFromDatabase();
User usr = User.findByUsernameAndPassword(params.username, params.password)
//println usr.username + ' ' + usr.password;
//username = params?.username;
//password = params?.password;
//println userList.size();
//for(User u : userList){
println 'username: ' + u.username + ' password: ' + u.password;
//if(u.password.equals(password) && u.username==username){
if(usr){
//User user = u;
flash.user = usr;
render (view: 'login.gsp', model:[user:usr]); // pass the user to view
//debug
println 'user.username: ' + user.username;
return;
}
//}
render 'login failed';
}