hellolift学习笔记(9)

至此,hellolift例子的分析对我来说已经完成了他的使命。虽然还遗留了一些没搞清楚的问题,但是基本上已经可以适应scala风格的代码阅读,对liftweb框架也有了一个基本成型的认识。至少我现在已经比较容易俯下身来去了解scala的一些细节,也可以比较轻松的去阅读liftweb的文档去掌握更多的内容。所以下一阶段会把学习重点暂时转移到《Programming In Scala》和《The Definitive Guide To Lift》的研读,同时自己做一些小东西。

今天来把这个系列笔记暂时结束掉。

10. User
User的实现继承了Mapper框架中的MegaProtoUser和MetaMegaProtoUser,并对他做了一些扩展,在这里重点学习了这种扩展方式和在菜单实现中的特殊的地方。

这里的User与框架的缺省实现,仅仅增加了一个blogtitle属性,这个属性通过signupFields来标识注册的时候需要填写这个字段。

通过重载dbTableName可以设定改变映射的table,如果不做这个系统会默认使用user_t的名称。

一度让我迷惑的是下面这个实现

override val basePath: List[String] = "user_mgt" :: "usr" :: Nil

在User中定义了basePath,在生成User相关的菜单时会生成/user_mgt/usr/login的url地址,但是在代码中找不到这样的目录及模板。
原来,Loc创建时的LocParam参数有一个子类是Template,这个子类注册一个函数,函数将处理请求,执行的结果将返回NodeSeq,作为页面的输出。
 /**
* Allows a user to specify a template based upon a function from the current
* value encapsulated in the Loc
*/
case class Template(template: () => NodeSeq) extends AnyLocParam


在User的实现中是这样的代码

...
Template(() => wrapIt(login))
...
protected def wrapIt(in: NodeSeq): NodeSeq =
screenWrap.map(new RuleTransformer(new RewriteRule {
override def transform(n: Node) = n match {
case e: Elem if "bind" == e.label && "lift" == e.prefix => in
case _ => n
}
})) openOr in
}
...
def login = {
if (S.post_?) {
...
}
bind("user", loginXhtml,
"email" -> (FocusOnLoad(<input type="text" name="username"/>)),
"password" -> (<input type="password" name="password"/>),
"submit" -> (<input type="submit" value={S.??("log.in")}/>))
}


def loginXhtml = {
(<form method="post" action={S.uri}><table><tr><td
colspan="2">{S.??("log.in")}</td></tr>
<tr><td>{S.??("email.address")}</td><td><user:email /></td></tr>
<tr><td>{S.??("password")}</td><td><user:password /></td></tr>
<tr><td><a href={lostPasswordPath.mkString("/", "/", "")}
>{S.??("recover.password")}</a></td><td><user:submit /></td></tr></table>
</form>)
}



这里的代码不再做详细的解释,说明几点
1) S.??是国际化的做法,用来读取properties文件定义的串值
2) 这里展示了toForm之外另一种输出页面内容的做法
3) 这里输出的只是核心的form内容,完整的页面在具体的应用确定,在通过在子类中定义screenWrap来实现这个控制。

其他的User相关的页面实现过程大体类似,不再赘述。

--------------------------------------------------------------------------------
题外话:写这个笔记的过程中发现,写点东西还真希望有很多的人关注,算是虚荣哈,感谢来看我写的东西的朋友们,有空还要多来踩一踩哈:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值