2013-11-28 4 views
0

두 개 또는 여러 개의 매개 변수를 사용하여 URL을 작성하는 방법은 무엇입니까?리프트 : 여러 매개 변수가있는 메뉴 [Menu.params]

case class PageDetail(index: String, id: String) 

전 메뉴 발을 할 노력하고있어 :

난 경우 클래스를했습니다

val menu = Menu.params[(String,String)]("pageDetail", "Page Detail", 
    ids => { case Full(index) :: Full(id) :: Nil => Full((index, id))}, 
    pi => { case (index, id) => index :: id :: Nil })/"admin"/"detail" 

난 .../관리자/세부로 링크를 얻을 싶습니다/indexxxxxxx/idddddddddd 여기서 indexxxxxxx 및 idddddddddd는 내 매개 변수입니다. 그대로 작동하지 않습니다. 컴파일 시간에 오류가 발생했습니다. 어떻게해야합니까? 감사합니다.

+0

정보가 충분하지 않음 :은 "컴파일 타임 오류"무엇을 말하는가

그래서, 코드는 다음과 같이해야합니까? 읽어 봤니? – VasyaNovikov

+0

익명 함수의 인수 유형은 완전히 알려 져야합니다. (SLS 8.5) [오류] 예상 유형 : net.liftweb.common.Box [(문자열, 문자열)] [오류] ids => {경우 전체 (인덱스) :: 전체 (ID) :: 없음 => 전체 ((인덱스, id))}, [오류]^ [오류] (brainaetic-web/컴파일 : 컴파일) 컴파일 실패했습니다. – YoBre

답변

2

대부분 추출 패턴에 문제가 있습니다. 여기 목록에 일치하는 경우 :

case Full(index) :: Full(id) :: Nil => Full((index, id)) 

을 매개 변수는 항상 정의 할거야, 그래서 Full 수 없습니다. AsInt과 같은 함수를 사용하여 매개 변수를 Int로 지정하거나 String을 찾을 수 있습니다.

case index :: id :: Nil => Full((index, id)) 

당신이 매개 변수는 선택 사항입니다 의미하는 빈 사용하는 경우는, 당신은 단순히 그것을 후 두 번째 case 문을 추가합니다 : 당신은 대부분 다음 (또는 약간의 변형)로 시작 싶어 매개 변수가 생략되었습니다.

또한 / "admin"/"detail" 매핑의 끝 부분에 을 추가해야 거기에서 매개 변수를 가져올 수 있습니다.

val menu = Menu.params[(String,String)]("pageDetail", "Page Detail", 
    { 
    case index :: id :: Nil => Full((index, id)) 
    }, { 
    case (index, id) => index :: id :: Nil 
    } 
)/"admin"/"detail"/** 
+0

안녕하세요 @jcern. 귀하의 제안으로 코드를 업데이 트했지만 같은 오류가 발생했습니다 : 유형 불일치, 예상 : (문자열, 문자열) => 목록 (문자열), 실제 : (문자열, String) => 모든 – YoBre

+0

@ YoBre, 제안 된 코드 블록으로 답변을 업데이트했습니다. 이러한 변경으로 인해 코드가 작동합니다. – jcern

+0

대단히 감사합니다. @ jcern, 잘 작동합니다. – YoBre