aşağıdaki kapsamları hakkında yazılır:Grails 3 Kontrolör Kapsam <a href="https://grails.github.io/grails-doc/latest/ref/Controllers/scope.html" rel="nofollow">Grails 3 documentation</a> baktığımızda
için oluşturulacak buradaprototip (varsayılan) - Yeni bir kontrolör (Kapatma özellikleri olarak eylemler için önerilir) her istek
garip kısmı Grails 3.1.4 anlamlı farklı sonuçlar açıkça devlet ben eğer elde ediyoruz:
static scope = "prototype"
Tak örneğin e aşağıdaki 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());
}
}
}
Ve statik kapsamı atlanırsa
class UserService {
def getAllUsersInAd() {
println("######### querying")
return new ArrayList<String>();
}
}
, aşağıdaki UserService: Ben bir Firefox tarayıcıyı kapatmak ve yeniden açın zaman, "do not have
Ne kadar kaç kez kapattığımı/yeniden açtığımı göz önünde bulundurursun. Bu konuda daha da garip olan şey, Firefox'u kapattığımda tamamen farklı bir tarayıcıyı (krom gibi) açabileceğim ve aynı mesajın çalıştırılabileceğidir. Bu denetleyicinin kapsamı, JSF'nin @UygulamaScope'una benzer bir durumdur. İyi bir 5-10 dakika boşta kalma süresinden sonra, sorgu yeniden yürütülür, ancak senaryo kalır. Statik kapsam ifade edilirse
: beklendiği gibi her tarayıcı kapanış sonra
, yürütülen "kullanıcıları yüklemek zorunda".
Sorum şu, varsayılan kapsamın yanlış olduğu belgelendirmedir? Öyle değilse, açık bir şekilde kapsamı belirten "prototip" ve onu atlatma arasındaki fark nedir (yukarıdaki açıktan başka)?
Yapılandırma ayarınız yukarıda açıklandığı gibi ise, denetleyicinizde "static scope = ..." yoksa, denetleyicileriniz 'singleton' olacaktır. Bu, denetleyicinizde "static scope = 'prototype'" olduğunda neden farklı davranışlar gördüğünüzü açıklar. –