我很难找到Menu.param的通用定义。 Simply Lift中有一个例子,在这个论坛中有一些代码参考,但这个特征很重要,而且,据我所知,还没有很好的记录。
目前,我的网站地图存在问题。我在sitema Boot.scala中声明的任何内容和代码似乎都被接受但后来被忽略了。 localhost:8080 / journal导致404,菜单项“Autobiography”没有出现在站点地图中。
因此,一方面,这篇文章是对此代码的求助。为什么被忽略? (同样,它编译并执行时没有错误。)
另一方面,在David Pollack的例子之外,它只是我还是“param”没有记载?它不在API中:http://main.scala-tools.org/ mvnsites / liftweb-2.0 / framework / scaladocs / net / liftweb / sitemap / Menu $ object.html。
感谢。
这是我的站点地图。我在Simply Lift中添加了Param示例,看它是否有效。它没有。
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")))
这是它引用的代码,来自代码段子包中的文件。 Lift可以找到类:它不会抱怨它们没有被定义。
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)
}
答案 0 :(得分:1)
如您所见,您有两个相同路径的菜单引用:
// 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
,并且具有相同的菜单ID“自传”,这就是它无效的原因。
您可以尝试在AutobiographyPageMenu.param中更改菜单ID“Autobiography”,看它是否有效。