4.Request Details
这是Menu中的第二项,我们看这里面有什么东西,入口链接是/request,这是我们在Boot.scala中定义SiteMap是指定的。他的页面,模板查找过程与index一致,我们可以找到页面中用到的snippet
<lift:BlogUtil.requestDetails />
看requestDetails的实现,又是一个xml Literals,我们来看这里用到的scala代码
Request's Locale: {S.locale}
S对象(net.liftweb.http.S)在liftweb中用来保存当前请求的状态,它由框架负责创建并填充相应的信息,在这里用来获取HTTP请求的locale值。(更详细的解释可以查看《The Definitive Guide To Lift》Ch7,P134,以后应该会经常碰到这个对象)
User.currentUser.map(ignore => S.locale.toString).openOr("No User logged in.")
(对我这样的sacla初学者,这句话包含了太多的东西
)
1) User是object com.hellolift.model.User;
2) 方法currentUser 的定义位于User所继承的MetaMegaProtoUser,这个方法实现目前对我来说还太复杂,在这儿先简单的知道这里将返回当前用户,返回值是一个Box[User]
i)Box (net.liftweb.util.Box) 在lift中使用的频率相当高,最近常见到几位大侠说Maybe Monad,Box就是一个这样的东西了,我理解主要目的是为了减少为避免空指针异常而导致的大量的判断代码。有一些自己的扩展,Box类似于scala中的Option,有两个子类Full和EmptyBox。
(关于Option和Box,可以进一步参考night_stalker的
Scala 的杂记9:Option 和 Box)
ii)在这里currentUser的返回值有两种情况:当用户已登录时,返回Full(User);未登录时,返回Empty,Empty是继承了EmptyBox的Object
3) map是Box中定义的方法
def map[B](f : (A) => B)
Apply a function to the value contained in this Box if it exists and return a new Box containing the result, or Empty otherwise
return
- the modified Box or Empty
map(ignore => S.locale.toString) 意味着,当用户已经登录时,返回Full封装的用户请求的locale值即Full(S.locale.toString);当用户未登录时,将返回Empty
4) openOr 也是Box中定义的方法
def openOr[B >: A](default : => B)
Return the value contained in this Box if it is full; otherwise return the specified default [details]
return
- the value contained in this Box if it is full; otherwise return the specified default
当用户登录时,返回S.locale.toString,当用户为登录时,返回"No User logged in."
分享到:
相关推荐
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...
人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
CCNA学习笔记 CCNA学习笔记 CCNA学习笔记
nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...
docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...
PHP个人学习笔记
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
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...