至此,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相关的页面实现过程大体类似,不再赘述。
--------------------------------------------------------------------------------
题外话:写这个笔记的过程中发现,写点东西还真希望有很多的人关注,算是虚荣哈,感谢来看我写的东西的朋友们,有空还要多来踩一踩哈:)
分享到:
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...
希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能...
CCNA学习笔记 CCNA学习笔记 CCNA学习笔记
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...
docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...
PHP个人学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...
ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1