我的SessionVar对象应该在哪里?

时间:2011-11-29 03:46:38

标签: session scala lift

LiftScala)中的编程非常紧张,它们都有非常简洁的文档,而且你能找到的少数文档是不完整和误导的。

好吧,我要做的是在SessionVar中存储一个简单的字符串。因此,一个代码段将使用表单填充此字符串的值,而在另一个代码段中,我将在会话中显示字符串(或其默认值)。

到目前为止我所拥有的是:

SessionVar对象:

// the SessionVar will contain a String with "Anonymous" as default value.
object myUser extends SessionVar[String]("Anonymous")

我填写字符串的片段:

object Login extends LiftScreen {

  val name = field("Name: ", "")

  def finish() {
    // set the SessionVar string with the string entered
    myUser.set(name)
    S.notice("Your name is: "+name)
  }
}

我显示字符串的片段(另一个片段):

// show the string in SessionVar
"Your name: " + myUser.is
...

MyUser是我在会话中保存的对象。最大的问题是:我在哪里保留MyUser对象?我尝试了Boot.scala和两个代码段,但我一直收到此错误:not found: value myUser

我应该把它保存在哪里?我应该如何导入它?我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:11)

您可以将SessionVar放在与LiftScreen相同的“文件”中,但不在对象定义之外。

这样的事情:

package com.code.snippet
import ...

object myUser extends SessionVar[String]("Anonymous")
object Login extends LiftScreen {

  val name = field("Name: ", "")

  def finish() {
    // set the SessionVar string with the string entered
    myUser.set(name)
    S.notice("Your name is: "+name)
  }
}

现在,在你的另一个片段上,假设你将它放在另一个文件上(我认为它就像你使用的是LiftScreen,但是如果你使用的是常规片段类,你可以使用多个方法渲染部分的UI。 在这个其他文件中,您需要导入该对象。

package com.code.snippet
import com.code.snippet.myUser
class MySnippet {
  render ={
    "#message" #> "Your name: " + myUser.is
  }  
}

你也可以这样做:

package com.code
package snippet
// notice the package split into two lines, making the import shorter.
import myUser
class MySnippet {
  render ={
    "#message" #> "Your name: " + myUser.is
  }  
}