В Lift изменилось поведение Menu.param - PullRequest
2 голосов
/ 23 марта 2012

РЕДАКТИРОВАТЬ: я только что понял, что моя проблема не в том, что пример не работает! Это то, что страница не появляется в меню! Плюс, как я могу обработать страницу без параметров?

Мне трудно найти общее определение Menu.param. Есть пример в Simply Lift и несколько ссылок на код на этом форуме, но эта функция важна и, насколько я могу судить, не очень хорошо документирована.

Сейчас у меня проблема с картой сайта. Все, что я объявляю в sitema Boot.scala и код кажется принятым, но затем игнорируется. localhost: 8080 / journal ведет к 404, а пункт меню «Автобиография» не отображается в карте сайта.

Итак, с одной стороны, этот пост - призыв к помощи по этому коду. Почему это игнорируется? (Опять же, он компилируется и выполняется без ошибок.)

С другой стороны, это только я или "парам" недокументирован вне примеров Дэвида Поллака? Его нет в API: http://main.scala -tools.org / mvnsites / liftweb-2.0 / framework / scaladocs / net / liftweb / sitemap / Menu $ object. Html.

Спасибо.

Это моя карта сайта. Я добавил пример Param из Simply Lift, чтобы посмотреть, работает ли он. Это не так.

def sitemap = SiteMap(
  Menu.i("Home") / "index" >> User.AddUserMenusAfter, // the simple way to declare a menu
  Menu.i("Artifact") / "artifact", // Works
  // Menu.i("Autobiography") / "journal", // Works if I comment out the next line.
  AutobiographyPageMenu.menu,
  Menu.param[AutobiographyPage](​"Autobiography2", "Autobiography2", // Similar code as previous line. Doesn't work.
                                pageName => Full(AutobiographyPage(​pageName)),
                                ap => ap.pageName) / "journal2",
  Param.menu, // Added to see if D. Pollack's code would work. It didn't.

  // more complex because this menu allows anything in the
  // /static path to be visible
  Menu(Loc("Static", Link(List("static"), true, "/static/index"),
           "Static Content")))

Это код, к которому он относится, из файла в субпакете фрагмента. Лифт может найти классы: он не жалуется на то, что они не определены.

case class AutobiographyPage(pageName: String)

object AutobiographyPageMenu {

  val menu = Menu.param[AutobiographyPage](​"Autobiography", "Autobiography",
                                           pageName => Full(AutobiographyPage(​pageName)),
                                           ap => ap.pageName) / "journal"
  // I'm not sure what these two lines are for...
  lazy val loc = menu.toLoc
  def render = "*" #> loc.currentValue.map(_.​pageName)
}

// This code is copied from the Simply Lift book:

// capture the page parameter information
case class ParamInfo(theParam: String)

// a snippet that takes the page parameter information
class ShowParam(pi: ParamInfo)  {
  def render = "*" #> pi.theParam
}

object Param {
  // Create a menu for /param/somedata
  val menu = Menu.param[ParamInfo]("Param", "Param",
                                   s => Full(ParamInfo(s)),
                                   pi => pi.theParam) / "param"
  lazy val loc = menu.toLoc

  def render = "*" #> loc.currentValue.map(_.​theParam)
}

1 Ответ

1 голос
/ 24 марта 2012

Как видите, у вас есть две ссылки меню на один и тот же путь:

// Menu.i("Autobiography") / "journal", // Works if I comment out the next line.


val menu = Menu.param[AutobiographyPage](
  ​"Autobiography", "Autobiography", 
  pageName => Full(AutobiographyPage(​pageName)),
  ap => ap.pageName) / "journal"

Они оба соответствуют http://localhost/journal и имеют одинаковый идентификатор меню "Автобиография", поэтому он не работает.

Вы можете попробовать изменить идентификатор меню «Автобиография» в AutobiographyPageMenu.param, чтобы увидеть, работает ли он.

...