Simply Lift by David Pollak - HTML preview
Download the book in PDF, ePub, Kindle for a complete version.
Simply Lift
David Pollak
September 8, 2011
ii
Copyright © 2010-2011 by David Pollak
This document is licensed Creative Commons Attribution, Non Commercial, No Derivatives:
http://creativecommons.org/licenses/by-nc-nd/3.0/
Contents
iii
v
vii
1
3
5
The View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
The Chat Comet component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
The ChatServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
Chat In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Running it . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
What you don’t see . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
11
Starting at the beginning: Boot.scala . . . . . . . . . . . . . . . . . . . . . . . . . . 11
LiftRules rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Properties and Run modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
By convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Misc Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Html5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
SiteMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Defining the SiteMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
iii
iv
CONTENTS
Simplest SiteMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Menu and Loc[_] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Submenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
View First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Page source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Dynamic content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Surround and page chrome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Embed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Snippets and Dynamic content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Snippets in markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Snippet resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Dynamic Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Embedded Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Param Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Recursive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Wrap up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
27
Old Fashioned Dumb Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
OnSubmit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Stateful Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
RequestVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Field Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
But sometimes Old Fashioned is good . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
CONTENTS
v
43
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
REST the hard way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Making it easier with RestHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
A complete REST example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
63
Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Hooking it up to the UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Shared Shopping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Wrap up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
77
Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Snippet NodeSeq => NodeSeq . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Snippet instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Multiple methods on a snippet class . . . . . . . . . . . . . . . . . . . . . . . . 79
Inter-snippet communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Recursive Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Snippet parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Box/Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
S/SHtml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
SiteMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
GUIDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
How GUIDs are generated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Where they are used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
LiftRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
SessionVars and RequestVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.10 CSS Selector Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.11 Client-side behavior invoking server-side functions . . . . . . . . . . . . . . . . . . . 89
7.12 Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.13 Comet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
vi
CONTENTS
7.14 LiftActor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.15 Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.16 Type safety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.17 Page rewriting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.18 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
91
Localization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Localizing Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Resource Lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Accessing Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Lift Libraries and Injector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Lift WebKit and enhanced injection scoping . . . . . . . . . . . . . . . . . . . 95
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
HtmlProperties, XHTML and HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
XHTML via OldHtmlProperties . . . . . . . . . . . . . . . . . . . . . . . . 98
HTML5 via Html5Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Changing behavior mid-session or mid-request . . . . . . . . . . . . . . . . . 99
101
CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Msgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Msg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Children . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Comet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.10 Loc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.11 Surround . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.12 TestCond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
CONTENTS
vii
9.13 Embed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.14 Tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.15 WithParam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.16 VersionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.17 SkipDocType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.18 XmlGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.19 LazyLoad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.20 WithResourceId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
103
105
12 MVC (If you really want it)
109
111
13.1 First things first . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
13.2 Making a SiteMap entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
13.3 Creating the view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
13.4 Creating the Snippet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
13.5 Getting Ajaxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
13.6 Next Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
115
14 Dynamic html tables created from DB.runQuery()
117
14.1 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
14.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
15 Dynamically choosing content
119
15.1 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
15.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
121
123
17.1 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
17.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
viii
CONTENTS
125
18.1 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Find Your Next Great Read
Describe what you're looking for in as much detail as you'd like.
Our AI reads your request and finds the best matching books for you.
Popular searches:
Create a Free Account to Download
Join 9.7 million readers — your free account takes a minute, and your first book is ready right away
