Lift Framework 3.0-M2
Pre-releaseThis is the first “clean” release of Lift 3.0. This means that we've removed all currently-deprecated items from Lift 3.0 (i.e., anything that is deprecated in Lift 2.6 is gone in Lift 3.0-M2). This release still shouldn't be considered stable per se, in that there may be some additional removals in the future, but we don't currently have any such removals planned.
Additionally, a lot of additional feature work has gone into this, as many of the pull requests that were pending a milestone release of 3.0 before have now gone in. Here's a high-level breakdown of things that have gone in, though they are not yet particularly well-documented (more documentation will come before the 3.0 final release; in the meantime, please ask any questions you may have on the Lift mailing list).
Breaking Changes
- JavaScript handling
liftAjax
is no longer available on the client, as it has been significantly restructured.- There is now a public API for Lift's few client-side functions; it resides under the
window.lift
object. It is not yet documented, and should be considered volatile until we announce otherwise. - Lift AJAX calls are now routed under
<context path>/lift/ajax
- Lift comet calls are now routed under
<context path>/lift/comet
- Everything under
/lift
is reserved for Lift's use. That path can be customized via
LiftRules.liftContextRelativePath
. Unlike before, when you could customize AJAX and comet paths
separately, you can now only customize the top-level Lift path, and everything underneath
it is reserved for Lift's use, both present and future.
- (#1584)
lift-json
'sJField
stopped being aJValue
; it is now instead a type alias for(String, JValue)
. This is a cleaner representation, but it means thatmap
,transform
,find
, andfilter
only operate on properJValue
s, and using these on fields requires usingmapField
,transformField
,findField
, andfilterField
. - (#1548) The old binding strategy based on the
bind
function is now gone. CSS selector transforms should be used instead. Several built-in snippets have been migrated away from the old bind strategy. The changed snippets are:Paginator
ProtoUser
Crudify
LiftScreen
(now behaves likeCssBoundLiftScreen
)CssBoundLiftScreen
(nowLiftScreen
)FormProcessor
(removed)TableEditor
Util
inmapper.view
- (#1585)
CometActor
behavior has changed—comets with notype
specified are no longer supported.
Improvements
- (#1585) Sending new comets to the client in AJAX callbacks now works.
- (#1585) Comets can now be instantiated programmatically via a well-defined
S
API. - (#1613)
S.request
is now empty in comet actors. - (#1607) The
lazy-load
snippet now works in AJAX responses (builds on the comet support above). - (#1607) Scala
Future
and LiftLAFuture
can be used in a CSS selector transform and will automatically be set up for lazy loading. - (#1606, #1537) Lift 3 now builds exclusively on Scala 2.11, using sbt 0.13.
- (#1522) Add the ability to force reading
RestHelper
post data as JSON or XML even if the sentContent-Type
is incorrect. - (#1253)
withFilter
added toBaseResponse
class (for testing) so that it can be used correctly infor
comprehensions. - (#1574) Fix an issue where there were two very different overloads of
updateListeners
inListenerManager
. One of them is now namedsendListenersMessage
. - (#1559) JavaScript added to the page via
S.appendJs
during the initial page render is now accumulated into a file under the<context path>/lift
path and referenced from the page. Things likeon*
event handlers and such will in the future also be placed in this file so that the generated HTML is free of inline script when using Lift's built-in behavior. This will allow a restrictiveContent-Security-Policy
for security purposes.
Fixes
- (#1253)
withFilter
added toBaseResponse
class (for testing) so that it can be used correctly infor
comprehensions. - (#1572) Fixed an issue in 3.0-M1 where boolean values in roundtrip responses could cause issues.
- (#1593)
BsonRecordListField
validates all elements by default onvalidate
- (#1597) Fixed an issue in Lift 3.0-M1 where the AJAX paths did not include the context path.