我正在尝试做一个/ author /的简单案例,并让Lift根据传入的id构建一个Person对象。
目前我有一个作者代码段
class Author(item: Person) {
def render = {
val s = item match { case Full(item) => "Name"; case _ => "not found" }
" *" #> s;
}
}
object Author{
val menu = Menu.param[Person]("Author", "Author", authorId => findPersonById(authorId), person => getIdForPerson(person)) / "author"
def findPersonById(id:String) : Box[Person] = {
//if(id == "bob"){
val p = new Person()
p.name="Bobby"
p.age = 32
println("findPersonById() id = " +id)
Full(p)
//}else{
//return Empty
//}
}
def getIdForPerson(person:Person) : String = {
return "1234"
}
}
我试图做的是获取代码来构建一个盒装人物对象并将其传递给Author类的构造函数。在渲染方法中,我想确定框是否已满,并根据需要继续。
如果我改变
class Author(item: Person) {
到
class Author(item: Box[Person]) {
它不再有效,但是如果我将它保留原样,它就不再有效,因为Full(item)不正确。如果我删除它的val s行它(并用item.name替换s)。那我该怎么做呢感谢
答案 0 :(得分:0)
从findPersonById(id:String)返回Box:评估Box [Person],如果Box为Full,则将未装箱的值传递给您的函数。如果Box为Empty或Failure,则应用程序将显示404或相应的错误页面。
如果你想自己处理这个错误检查,你可以尝试双击你的回报(这样这个方法的结果总是一个完整的盒子)。
def findPersonById(id:String) : Box[Box[Person]] = {
if(id == "bob"){
val p = new Person()
p.name="Bobby"
p.age = 32
println("findPersonById() id = " +id)
Full(Full(p))
}else{
return Full(Empty)
}
}
然后这应该有效:
class Author(item: Box[Person])