Grails将对象传递给gsp

时间:2018-03-07 13:48:08

标签: grails gsp

我想将我的数据库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>

将具有所有属性的对象传递给视图的正确方法是什么?我无法达到目的。

1 个答案:

答案 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';
    }