Lift
(Scala
)中的编程非常紧张,它们都有非常简洁的文档,而且你能找到的少数文档是不完整和误导的。
好吧,我要做的是在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
。
我应该把它保存在哪里?我应该如何导入它?我怎样才能使它发挥作用?
答案 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
}
}