好的,所以我有一个自定义对象是myUser。
myUser看起来像这样:
username:String = ""
firstname:String = ""
lastname:String = ""
我有一个进入页面的这些用户列表,我已经建立了一个链接来查看每个用户的详细信息。当您单击某个用户时,它将填充我作为请求var的盒装对象,然后直接转到详细信息页面以查看此用户信息。为什么我不能从这个对象的地图绑定?这是一些代码...
private object selectedUser extends RequestVar[Box[myUser]](Empty)
def getusers(html: NodeSeq):NodeSeq = {
//This gets me a list of 10 users that are "myUser" objects
val userList = User.getUsers(10)
userList.flatMap{user => bind("user", html,
"username" -> SHtml.link("/%2Fadmin%2Fdetail", () => selectedUser(Full(user)), Text(user.username)),
"firstname" -> {user.firstname},
"lastname" -> {user.lastname},
"lastloggedin" -> {user.lastloggedin})}
}
现在当我到达用户详细信息页面时,我想要映射出我写过的selectedUser对象....但由于某种原因,我无法让它工作,它给了我这个错误:< / p>
类型不匹配;发现: net.liftweb.common.Box [scala.xml.NodeSeq] required:scala.xml.NodeSeq
以下是给我这个错误的代码:
def userdetail(html: NodeSeq):NodeSeq = {
selectedUser.is.map{user => bind("user", html,
"username" -> {user.username},
"firstname" -> {user.firstname},
"lastname" -> {user.lastname},
"lastloggedin" -> {user.lastloggedin})}
}
有趣的是,我可以这样做,它会起作用,但必须有一种方法可以在一行上做到这一点吗?
这有效......但它很麻烦:
def userdetail(html: NodeSeq):NodeSeq = {
var username = ""
var firstname = ""
var lastname = ""
var lastloggedin = ""
bind("user", html,
"username" -> {username},
"firstname" -> {firstname},
"lastname" -> {lastname},
"lastloggedin" -> {lastloggedin})
}
有人可以告诉我我在这里失踪的小事吗?我希望我能够清楚地解释自己。
谢谢!
答案 0 :(得分:2)
如果没有selectedUser,则会给你一个空的NodeSeq,否则会给你一个结果。
def userdetail(html: NodeSeq):NodeSeq = {
selectedUser.is.toList.flatMap{user => bind("user", html,
"username" -> {user.username},
"firstname" -> {user.firstname},
"lastname" -> {user.lastname},
"lastloggedin" -> {user.lastloggedin})}
}