在grails中使用findBy()时出错

在grails中使用findBy()时出错,grails,groovy,gsp,grails-controller,Grails,Groovy,Gsp,Grails Controller,我有一个普惠制页面: <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: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>
以及欢迎页面:

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

但在我的IDE控制台中,
println(params.id)
打印用户名,但带有方括号。我的代码有什么问题?

这是我的用户域类:

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标记中,我将freegorer放在括号中,并更改为
User.findByUsername()
。但也有同样的错误。我不想要params.id作为列表

是的,您必须在标记中使用括号。这是第一位

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

</g:if>

否则,groovy truth将始终将非空字符串计算为true,因此您的测试将有缺陷

此外,我将使用g:link而不是html'a'标记

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

${freeloper.firstName}
建议使用User.findByUsername()而不是find closure

让我们知道这是否有效

在您的“主页”操作中尝试

def user=user.find{it.username==params.id}
而不是


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

那么params.id结果是主页操作中的列表吗?你能发布你的域名源代码吗?我们可能还需要看看你是如何填充你的自由职业者收藏并将其传递给视图的。你的User.find太过分了。只需执行User.findByUsername(params.id)。我也很惊讶你的g:if有效。你的测试中没有${}个自由职业者。毫无意义。
<g:if test="${freelancer}">

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