0

GSP ページがあります。

<g:if test="freelancer">
        <g:each in="${ freelancer }" var="freelance">
            <a href="${ createLink(controller:'user', action:'homepage', id:freelance.user.username) }">${ freelance.firstName }</a>
        </g:each>
</g:if>

そしてアクション:

def homepage() {
    println(params.id)
    def user = User.find{
        username == params.id
    }
    if(user){
        println(user.username + "!")
        return[user:user]
    }
}

そしてようこそページ:

<body>
    Welcome ${ user.username }
</body>

最初の GSP ページで firstName リンクを取得し、それをクリックして彼のホームページを表示すると、エラーが発生します。

Cannot get property 'username' on null object

しかし、私の IDE のコンソールではprintln(params.id)、ユーザー名が出力されますが、角かっこが付きます。私のコードで何が間違っていますか?

4

3 に答える 3

1

「ホームページ」アクションで試してください

def user = User.find{ it.username == params.id }それ以外の

def user = User.find{ username == params.id }

于 2013-06-19T19:03:39.603 に答える
0

これは私のユーザードメインクラスです:

class User {
String username
String passwordHash
byte[] passwordSalt
Profile profile

static hasMany = [ roles: Role, permissions: String ]

static constraints = {
    profile(nullable:false)
    username(nullable: false, blank: false, unique: true, size:3..15)
    passwordHash(nullable:false, blank:false, minSize:6)
}

static mapping = {
    profile lazy:false
}

g:if タグで freelancer を括弧に入れて に変更しましたUser.findByUsername()。しかし、同じエラーがあります。params.id をリストにしたくありません。

于 2012-07-02T05:41:00.190 に答える
0

はい、タグで括弧を使用する必要があります。それが一番です。

<g:if test="${freelancer}">

</g:if>

そうしないと、groovyの true は常に空でない文字列を true として評価するため、テストに欠陥が生じます。

また、html の「a」タグの代わりに g:link を使用します。

    <g:each in="${ freelancer }" var="freelance">
        <g:link controller='user', action='homepage', id="${freelance.user.username}">
            ${freelance.firstName}
        </g:link>
    </g:each>

提案として、find クロージャーの代わりに User.findByUsername() を使用することを考えてください。

それが機能するかどうかお知らせください。;)

于 2012-07-04T19:16:18.243 に答える