سؤال

أحاول تخزين متغير جلسة ثم استخدامه لتعديل القائمة في boot.scala. إليكم كيف أقوم بتخزين المتغير في مقتطف:

object sessionUserType extends  SessionVar[String](null)
  def list (xhtml : NodeSeq) : NodeSeq = {

    Helpers.bind("sendTo", xhtml, 
                 "provider" -> SHtml.link("/providerlogin",() => sessionUserType("provider"), Text("Provider")),
                 "student" -> SHtml.link("/studentlogin",() => sessionUserType("student"), Text("Student")))
    }

ثم في boot.scala أفعل هذا:

val studentSessionType = If(() => S.getSessionAttribute("sessionUserType").open_!.equals("student"),
            "not a student session") 

حاولت أيضًا الاتصال بالكائن بالاسم (SessionUserType) ، لكن لا يمكن أن تجده أبدًا ، لذلك اعتقدت أن هذا قد ينجح ، لكنني أستمر في الحصول على مربع فارغ عند الوصول إليه على الرغم من تنفيذ الربط الفعلي والوظيفة قبل عرض القائمة.

أي مساعدة سيكون محل تقدير كبير.

شكرًا

هل كانت مفيدة؟

المحلول

من أجل الحصول على قيمة من SessionVar أو RequestVar, ، يتصل is طريقة على ذلك ، أي sessionUserType.is

بالمناسبة ، هل قرأت "إدارة الدولة"?

ملاحظة جانبية

أعتقد RequestVar هو أفضل في حالتك. لست متأكدًا من أنه يمكنني التقاط الكود الخاص بك مباشرة بدون السياق ، ولكن يمكن إعادة كتابته على الأقل مثل:

case class LoginType
case object StudentLogin extends LoginType
case object ProviderLogin extends LoginType

object loginType extends RequestVar[Box[LoginType]](Empty)
// RequestVar is a storage with request-level scope

...
"provider" -> SHtml.link("/providerlogin",() => loginType(Full(ProviderLogin)), Text("Provider")),
// `SHtml.link` works in this way. Your closure will be called after a user
// transition, that is when /providerlogin is loading.
...

val studentSessionType = If(() => { loginType.is map {_ == StudentLogin} openOr false },
                "not a student session")
// As a result, this test will be true if our RequestVar holds StudentLogin,
// but it will be so for one page only (/studentlogin I guess). If you want
// scope to be session-wide, use SessionVar

نصائح أخرى

أعتقد أن الانفصال هو أنك تفترض أن أ سمة الجلسة سوف تتطابق مع Sessionvar, ، وهذا ليس هو الحال. المصعد جدا يؤمن الإطار ، وواحد إذا كانت ميزاته هي أن المصعد يخلق Guids غير شفاف للإشارة إلى المكونات على جانب الخادم.

إن أردت getSessionAttribute لإعادة شيء ما ، فكر في كيفية الاتصال setSessionAttribute.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top