我希望能够让人们在我的grails应用程序的第一页上登录/注销

我希望能够让人们在我的grails应用程序的第一页上登录/注销,grails,login,indexing,logout,Grails,Login,Indexing,Logout,我希望在grails应用程序的第一页上进行登录和注销,并在那里显示任何错误消息。我在我的用户域中有一个身份验证函数和一个注销函数。有人登录到authenticate功能后,我通过重定向将其返回到主屏幕: redirect(uri:"") 如果我对注销做了同样的操作,那么在呈现页面时会出现一个错误,说它找不到用户对象。下面是输出 错误500:执行控制器[com.thornglatch.pingo.UserController]的操作[logout]导致异常:无此类属性:类名称:com.thorn

我希望在grails应用程序的第一页上进行登录和注销,并在那里显示任何错误消息。我在我的用户域中有一个身份验证函数和一个注销函数。有人登录到authenticate功能后,我通过重定向将其返回到主屏幕:

redirect(uri:"")
如果我对注销做了同样的操作,那么在呈现页面时会出现一个错误,说它找不到用户对象。下面是输出

错误500:执行控制器[com.thornglatch.pingo.UserController]的操作[logout]导致异常:无此类属性:类名称:com.thornglatch.pingo.User可能的解决方案:游戏 Servlet:grails URI:/Pingo/grails/user/logout.dispatch 异常消息:无此类属性:类名称:com.thornglatch.pingo.User可能的解决方案:游戏 原因:无此类属性:类名称:com.thornglatch.pingo.User可能的解决方案:游戏 类:用户控制器 第[25]行

我相信,这就是它试图呈现的内容:

<div id="menu">
  <nobr>
    <g:if test="${session.user}">
      <b>${session.user?.firstName}&nbsp;${session.user?.lastName}</b> |
        <g:link controller="user" action="logout">Logout</g:link>
    </g:if>
    <g:else>
      <g:link controller="user" action="login">Login</g:link>
    </g:else>
  </nobr>
</div>
这个版本有效。在一个没有的例子中,flash.message行是:

flash.message = "Hello ${name}"

我可以接受这一点,但我想知道为什么使用name不起作用。

这看起来并不像您描述的问题那样是一个功能错误。事实上,代码片段似乎没问题,它被正确调用了

问题似乎是您试图在运行时访问类
com.thornglatch.pingo.User
中不存在的属性(
name

查看
com.thornglatch.pingo.UserController
第25行,检查您正在访问的
名称是否有setter和getter,或者它是否是
com.thornglatch.pingo.User
中的公共字段。或者检查声明是否存在(如果是变量)


请记住,Groovy是一种动态语言,因此您必须小心,因为成员字段访问检查将在运行时进行。

在考虑注释重新检查代码后,我添加了其他信息。我有一个版本现在可以用了,但正如你们所看到的,还有一个问题,“名字”应该可以用。您尝试过“def name='Hardcoded name'”吗?
flash.message = "Hello ${name}"