2
def handleLogin = {
   def hashPassd = DU.md5Hex(params.password)
   // Find the username
   def user = User.findByUserNameAndPassword(params.userName, hashPassd)
   if (!user) {
      flash.message = "User not found for userName: ${params.userName}"
      redirect(action:'index')
      return
   } else {
      session.user = user
      redirect(controller:'todo')
   }
}

if 条件为什么需要 return 语句?而 else 块不需要它?

4

2 回答 2

3

在这种情况下,不需要退货。如果 return 不存在,它将在 if 之后继续,这是方法的结尾,因此返回。

于 2012-07-20T00:46:54.270 回答
1

退货并不是绝对必要的,但这是一个养成的好习惯。render控制器动作中的和之类的调用redirect通常旨在成为动作的概念“结束”,有时很容易忘记并将重定向视为return

def someAction() {
  if(!params.id) {
    flash.message = "no ID provided"
    redirect action:'error'
  }

  def myObj = MyObj.get(params.id)
  //...
}

这将在运行时失败,可能带有相当模糊的错误消息,为了避免这种可能性,最好记住在对or的return任何调用之后放置一个显式的。当我回来更改我 6 个月前最初编写的控制器动作时,这种事情一直困扰着我……redirectrender

于 2012-07-20T12:02:11.890 回答