0

我正在尝试做一个简单的 /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)。那我该怎么做。谢谢

4

1 回答 1

0

从 findPersonById(id:String) 返回的 Box : Box[Person] 被评估,如果 Box 为 Full,则未装箱的值将传递给您的函数。如果 Box 为空或失败,则应用程序将显示 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]) 
于 2012-10-01T18:00:01.913 回答