Lift Framework - 将url param传递给Snippet类的问题

时间:2012-10-01 12:30:13

标签: lift param

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

1 个答案:

答案 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])