2012-10-01 2 views
0

발췌문 클래스에 대한 URL PARAM 전달에 문제가리프트 프레임 워크 -. 내가 전달 된 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" 
} 
} 

내가 무엇을 시도하고하는 것은 박스 사람 객체를 구축하고 저자 클래스의 생성자에 전달하는 코드를 얻을 수있다. render 메서드에서 상자가 꽉 찼는지를 결정하고 적절하게 진행하기를 원합니다.

은 내가

class Author(item: Person) { 

class Author(item: Box[Person]) { 

그것은 더 이상 작동하지만 내가 그것을 떠날 경우 전체 (항목)으로 더 이상 유효하지 않습니다 그대로

에 변경하는 경우 올바르지 않습니다. 내가 vals 줄을 제거하면 작동합니다 (그리고 s를 item.name으로 대체하십시오). 그래서 어떻게해야합니까? Thanks

답변

0

findPersonById (id : String)에서 반환 된 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])