2013-11-28 3 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 - мои параметры. как есть не работает. Ошибка во время компиляции. Как я могу сделать? Thanks

+0

Не хватает информации: что означает «ошибка во время компиляции» сказать? Вы читали? – VasyaNovikov

+0

Типы аргументов анонимной функции должны быть полностью известны. (SLS 8.5) [error] Ожидаемый тип: net.liftweb.common.Box [(String, String)] [error] ids => {case Full (index) :: Full (id) :: Nil => Полный ((index, 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)) 

Если вы используете 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"/** 
+0

Привет @jcern. Я обновил код с вашими предложениями, но у меня такая же ошибка: Тип несоответствия, ожидаемый: ((String, String)) => Список (String), actual: ((String, String)) => Любой – YoBre

+0

@ YoBre, я обновил ответ с помощью предлагаемого кода. Эти изменения должны позволить коду работать для вас. – jcern

+0

Большое спасибо @jcern, теперь отлично работаем – YoBre