scala & lift: перезапись URL с использованием переменной, объявленной вне LiftRules.statelessRewrite.append - PullRequest
3 голосов
/ 02 августа 2010

Я ищу решение для перезаписи URL-адресов в лифте, используя список, объявленный вне области действия LiftRules.statelessRewrite.append

LiftRules.statelessRewrite.append {  
    case RewriteRequest(ParsePath("abc" :: Nil, _ , _ , _ ), _ , _ ) =>  
        RewriteResponse("index" :: Nil)
}

. Мне бы хотелось, чтобы следующий код работал так же, каквыше:

val requestList = "abc" :: Nil

LiftRules.statelessRewrite.append {  
    case RewriteRequest(ParsePath(requestList, _ , _ , _ ), _ , _ ) =>
        RewriteResponse("index" :: Nil)
}

Может кто-нибудь написать, как получить такую ​​функциональность с лифтом 2.0?

[ edit ]

Не могли бы вы также предложить лучшееспособ получить доступ к суффиксу этого списка в качестве параметра.То, что я хотел бы получить, похоже на:

LiftRules.statelessRewrite.append {  
  case RewriteRequest(ParsePath(`requestList` ::: List(someId), _ , _ , _ ), _ , _ ) =>  
    RewriteResponse("index" :: Nil, Map("someId" -> someId))
}    

1 Ответ

4 голосов
/ 02 августа 2010

Любая переменная в нижнем регистре в операторе case создаст новую переменную с таким именем, поэтому requestList будет затенено. Попробуйте это:

val requestList = "abc" :: Nil

LiftRules.statelessRewrite.append {
  case RewriteRequest(ParsePath(list, _ , _ , _ ), _ , _ ) if list == requestList =>
    RewriteResponse("index" :: Nil)
}

Другой подход заключается в использовании обратных галочек (Scala ref: «шаблоны стабильных идентификаторов»):

LiftRules.statelessRewrite.append {
  case RewriteRequest(ParsePath(`requestList`, _ , _ , _ ), _ , _ ) =>
    RewriteResponse("index" :: Nil)
}    

В вашем случае вторая форма будет канонической, но в целом первая форма будет более мощной.

В качестве третьего варианта вы также можете определить val RequestList = requestList и сопоставить его с заглавной версией, хотя я бы советовал против этого, если у вас нет веских оснований для создания заглавной буквы RequestList.

...