は、以下のスコープについて書かれている:Grailsの3コントローラスコープ
プロトタイプ(デフォルト) - 新しいコントローラは、リクエストごとに作成されます(閉鎖性などのアクションを推奨)
static scope = "prototype"
徳:ここ
奇妙な部分があれば、私は明示的に状態私はGrailsの3.1.4で大幅に異なる結果を得ることです例えばe。次UserControllerで
class UserController {
def userService
List<String> users
def loadUsers() {
if (!users) {
println("########## have to load users");
try {
user = userService.getAllUsersInAd()
} catch (Exception e) {
// do something
}
} else {
println("########## dont have to do it " + users.size());
}
}
}
と静的スコープが省略されている
class UserService {
def getAllUsersInAd() {
println("######### querying")
return new ArrayList<String>();
}
}
場合は、次のUserServiceの:私はFirefoxブラウザを閉じて再度開いたときに、「に持っていけない
それは何回何回クローズ/再オープンしても関係なく実行されます。これについてもっと奇妙なのは、私がFirefoxを閉じたときに全く別のブラウザ(chromeなど)を開くことができ、同じメッセージが実行されるということです。このコントローラーの範囲がJSFの@ApplicationScopeと似ています。 5〜10分のアイドル時間が経過すると、クエリは再度実行されますが、シナリオは残ります。静的スコープが記載されている場合は
:予想通り、各ブラウザ閉じた後
が実行され、「ユーザーをロードするようにしています」。
私の質問は、デフォルトのスコープについてのドキュメントが間違っていますか?そうでない場合は、明示的にscope = "prototype"を記述し、それを省略すること(上記の明白さを除いて)との違いは何ですか?
あなたの設定が上記の通りであれば、コントローラーに 'static scope = ...'がなければ、コントローラーは 'singleton'スコープになります。これは、あなたのコントローラに 'static scope = 'prototype''があるときに違った振る舞いをする理由を説明します。 –