定义要在站点地图中的Loc中使用的模板

时间:2012-01-12 16:06:53

标签: scala lift

使用Sitemap,可以设置某些路径来处理前缀匹配,并允许提供子路径请求。我想指定给定路径下的所有请求都转到某个模板。所以我想:

Menu(Loc("show_theme", Link("show" :: "theme" :: Nil, true, "/show/theme"), "Show Theme") )

捕获对/ show / theme / *(它确实如此)的所有请求,但是使用/ show / theme(它没有)的模板来提供它们

我希望(例如)/ show / theme / 1使用/ show / theme中的模板,以及其中的片段来将ID从Req中拉出来。

这可能吗?或者我做错了吗?目前,我正在使用/ show_theme?theme = 1,但这有点难看,并且难以处理表单

编辑:我正试图摆脱使用CGI参数编码ID,并将它们作为路径结构的一部分

1 个答案:

答案 0 :(得分:2)

Loc代表一个页面和一个模板。如果要将多个URL映射到Loc,则需要使用Lift的URL重写。例如:

LiftRules.statefulRewrite.append {

  case RewriteRequest(ParsePath("show" :: "theme" :: theme :: Nil, _, _, _), _, _) =>
    RewriteResponse(ParsePath("show_theme" :: Nil, "", true, false), Map("theme" -> theme), false)

}

这将是对/ show / theme / *的匹配请求,并将它们重写为/ show_theme?theme = {theme}。您可以创建Loc以响应该URL,并将主题变量作为查询参数访问(S.param(“theme”))。

注意:您可以使用Loc DSL更简洁地完成此操作,但我认为理解幕后发生的事情是很好的。

如果您需要更多帮助,我建议您向Lift Google Group发送消息。我想你会找到比你更快的答案。