提升:带有多个参数的菜单[Menu.params]

时间:2013-11-28 11:25:06

标签: scala sitemap lift

如何建立一个包含两个或多个参数的网址?

我有一个案例类:

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"

我想获得一个链接为... / admin / detail / indexxxxxxx / idddddddddd其中indexxxxxxx和idddddddddd是我的参数。 因为是行不通的。编译时出错。我能怎么做? 感谢

1 个答案:

答案 0 :(得分:2)

最有可能的问题是你的提取器模式。当您在列表中匹配时:

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

始终要定义参数,因此无法Full。您可以使用AsInt等函数来要求参数为Int,否则它将查找String。你很可能想从以下开始(或者有一些变化):

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

如果您使用Empty表示该参数是可选的,那么您只需在其后添加第二个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" / **