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

この場合、返品は必要ありません。戻り値がない場合は、メソッドの終わりであるifの後に続き、したがって戻ります。

于 2012-07-20T00:46:54.270 に答える
1

返品は厳密には必要ありませんが、参加するのは良い習慣です。コントローラアクションのような呼び出しrenderredirectコントローラアクションでの呼び出しは、通常、アクションの概念的な「終了」であることが意図されており、時々忘れて、リダイレクトをあたかもそれであるかのように扱うのは簡単です。return

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

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

これは実行時に失敗し、おそらくかなりあいまいなエラーメッセージが表示されます。この可能性を回避するために、またはreturnへの呼び出しの後に明示的なものを置くことを忘れないでください。それは、私が6か月前に最初に書いたコントローラーアクションに変更を加えるために戻ってきたときに私を噛んだようなものです...redirectrender

于 2012-07-20T12:02:11.890 に答える