Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 197 lines (162 sloc) 6.817 kB
9681159 @tjweir Lets seed
authored
1 Table of Contents: 
2
3 Pick an application to build from scratch.
4 Should we compare and contrast with other frameworks? I don't know many others
5
79972f3 Major expansion started on the ToC/Outline. Lots more work to do but I
Derek Chen-Becker authored
6 Ideas:
7 1. Include a "Lift quick reference card": all of the lift template tags, brief overview of the render flow (with cross-refs)
8
9 --------------------
10 IMHO we should start with an introduction that gives a brief overview
11 of what Lift is trying to solve, how it works and why it does it
12 well. The first half would explain some basics about it (built on
13 Scala, incredible template support, clean separation of V and C), and
14 then the second half would walk the user through running the HelloLift
15 example just to get something going out of the box. From my
16 understanding at this point that would involve just three things:
17 installing Java (if required), installing Maven2, and then downloading
18 and running the HelloLift project zip. Of those three, I think
19 installing Maven is probably the most complex  - Derek
9681159 @tjweir Lets seed
authored
20
21 So you see 2 distinct Sections: Generalized info and intro, and getting into and building an app?  Sounds good to me.  -Tyler
22 --------------------
23
79972f3 Major expansion started on the ToC/Outline. Lots more work to do but I
Derek Chen-Becker authored
24 ====== Intro Section ======
25
26 1. Introduction
27 * Welcome to lift
28 * What is lift?
29 * Fast, flexible template-based web framework built on Scala
30 * Full-featured template system
31 * Clean separation of M,V and C
32 * Powerful Web 2.0 (AJAX, COMET) support baked in
33 * Thriving community of developers
34 * Brief overview of Scala
35 * OO/FP Hybird
36 * Compiles to JVM Bytecode
37 * Made by the good people who brought us generics
38 * You get a new powerful language with access to all of Java's libs
39 * Why another framework?
40 * Too much boilerplate in other frameworks (Struts, we're talking about you)
41 * Exposure of programming logic in templates makes things difficult (JSP, etc)
42 * Scala has higher efficiency in terms of LoC per function point
43 * Powerful AJAX, COMET and JS support
44 * Let's try out HelloLift
45 * Prerequisites
46 * Java 1.5 or newer (Scala is not required directly since Maven will pull it down)
9681159 @tjweir Lets seed
authored
47 * Maven 2 - include a very brief synopsis on Maven. Anything more detailed should point to the Maven site or go in an appendix
3f3ec1e Fixed some whitespace that git was complaining about
Derek Chen-Becker authored
48 * Some sort of programming editor is recommended: mention emacs, Eclipse, NetBeans, JEdit, etc.
79972f3 Major expansion started on the ToC/Outline. Lots more work to do but I
Derek Chen-Becker authored
49 * Download the HelloLift project and unzip it
50 * "mvn jetty:run"
51 * Profit!
52 * Cursory examination of:
53 * Index template (shows surround and snippet)
54 * Default template
55 * Hello snippet
56
57 2. Getting to know Maven and Project layout (based on HelloLift example)
58
59 - I think this should be a small, but self-contained section with
60 enough info so that someone who wanted to do "standard" things with
61 Maven wouldn't need to go digging around on the site. In other
62 words, enough info on maven in this book to handle all of the
63 examples we use in the book.
64
65 * What is maven
66 * Comprehensive project and build management
67 * Structured project layout (conventions)
68 * Dependency management
69 * Automated testing and packaging
70 * Automated reporting
71 * Archetypes: project "templates"
72 * Directory layout
73 * Scala-specific stuff
74 * web content
75 * resources
76 * Introducing the POM
77 * Project info (author, date, version, etc)
78 * Repo definitions
79 * Dependencies
80 * Special build targets
3f3ec1e Fixed some whitespace that git was complaining about
Derek Chen-Becker authored
81
79972f3 Major expansion started on the ToC/Outline. Lots more work to do but I
Derek Chen-Becker authored
82 ====== General Topics ======
83
84 3. Lift Architecture in general (need info from dpp and marius)
85 * Everything handled by LiftFilter
86 * Show example config in web.xml
87 * Handling in LiftFilter allows fall-through to default handlers for things that Lift doesn't handle (Static content, primarily)
88 * Rendering pipeline (This can be high-level right now, with links to detailed info in the advanced section - Derek)
89 * Dispatch to proper code
90 * dispatch methods in effect?
91 * rewrite methods in effect?
92 * SiteMap matching and access control
93 * template or view matched?
94 * recursive processing of template and any snippets contained therein
95 * direct processing of view
96 * Error handling
97 * List of tags that are handled by Lift (stolen from http://liftweb.net/index.php/LiftTags, not sure how up-to-date this is)
98 * surround
99 * embed
100 * comet
101 * ignore
102 * snippet (and, the alternative lift:<class>.<method>)
103 * additional attribute handling in tags (via S.attr)
104
105 4. A detailed look at lift user components
106 * SiteMap
107 * Performs two primary duties: generates the menu for your site (customizable) and performs per-page access control
108 * Cover Menu, Loc objects to define paths and superpaths (my term for paths that match anything under them)
109 * Additional attributes
110 * If
111 * Unless
112 * etc
113 * Templates
114 * Static xml that may embed or surround other templates, and may embed snippets (reference tag list)
115 * well-formed XML
116 * Special template-hidden directory not directly accessible
117 * Use of prefixed elements to assist with binding in snippets
118 * Re-cover how templates are located/dispatched
119 * Snippets
120 * Chunks of code that generate pieces of a final output page. May themselves generate template code that is interpreted
121 * Generic Scala classes (stateless)
122 * How to deal with state in snippets
123 * RequestVars
124 * SessionVars
125 * StatefulSnippets
126 * Using Helpers.bind. In particular, cover view vs. forms usage
127 * Using Helpers.chooseTemplate for nested templates
128 * Views
129 * Chunks of code intended to generate a complete page
130 * Can be shoehorned to process template code via processSurroundAndInclude
131 * Re-cover how views are located/dispatched
132 * Path-based (/my/view)
133 * addDispatchBefore/After
134 * What are the use cases for snippets vs. views?
135
136 5. Intro to the Mapper package
137 ...
138
139 6. AJAX and COMET
140 ...
141
142 7. Deployment
143 ...
144
145 ====== Advanced Topics ======
146
147 8. Detailed request/response handling info
148 ...
149
150 9. URL Rewriting
151 * Why and how?
152 * Example: user-friendly URLs
153
154 10. JSON handling
155 ...
156
157 11. JsCommands
158 * Integrated javascript handling without hard-coding it in templates
159 * jQuery intro
160 * Utility library that makes IE6 less ugly ;)
161 * Powerful support for dynamic attributing of elements
162 * Based on CSS selectors
163
164 12. AJAX and COMET in depth
165
166 13. JPA Integration
167
168 14. Using Scala Actors
169
170 ====== Advanced Examples ======
171
172 15. OpenID Integration
173
174 16. Lucene/Compass Integration
175
176 17. Tagging support
177
178 ====== Appendices ======
179
180 A. Lift message handling
181
182 B. Helpers methods, in particular Can/Empty/Full
183
184 C. I18N and L10N
185 * S.?(String)
186 * lift:loc tag
187 * Proper placment of language resources
188
189 D. Logging
190 * Configuring built-in log4j
191 * Using slf4j instead
192
193 E. Mailer
194 * Configuring the mailer lib
195 * Sending email
9681159 @tjweir Lets seed
authored
196
Something went wrong with that request. Please try again.