0

/author/ の単純なケースを実行しようとしており、渡された ID に基づいて Lift に 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 クラスのコンストラクターに渡すコードを取得することです。render メソッドで、ボックスがいっぱいかどうかを判断し、必要に応じて続行します。

私が変われば

class Author(item: Person) {

class Author(item: Box[Person]) {

機能しなくなりましたが、そのままにしておくと、Full(item) が正しくないため無効になります。val s 行を削除すると機能します (s を item.name に置き換えます)。では、どうすればよいのでしょうか。ありがとう

4

1 に答える 1

0

findPersonById(id:String) から返された Box : Box[Person] が評価され、Box が Full の場合、ボックス化されていない値が関数に渡されます。ボックスが空または失敗の場合、アプリケーションは代わりに 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 に答える