Between Loom 1.5 and 2.0 there have been a lot of changes, some of which are not backwards-compatible. This is the list of all the breaking changes, and proposed workarounds:
Checkboxes bound to sets: The way of specifying a checkbox bound to a set has changed to be able to remove elements from the set. Also, the new syntax has gained legibility. Legacy code should remove the "value" attribute and use it to index the set element, as in the example.
Changes in the forward files location: To adapt with what is the most common use case, forwarded files are searched in a folder corresponding to the action name, not the browser URL. This means that all events inside MyBlogAction will search the forwarded files in /WEB-INF/jsp/my-blog/. This change affects typically only those forward() invocations that start with "../"
Uploaded files are not bound to action properties anymore. After lots of practical testing, it seems that attempts to force a bidirectional relationship between Java and an uploaded file are failing because, from the browser point of view, files are unidirectional; you cannot push the file back. As a consecuence, files are no longer being bound to java properties and instead must be persisted from the FileParameter contents. This affects @ImageValidation and the FileManager subclasses (that now persist FileParameter values).
The "AJAX" request attribute has been removed. It seems that there is an equivalent EL expression that can be used (${header['X-Requested-With'] == 'XMLHttpRequest'}), and removing it reduces the payload for all other applications that are not using it. Anyway, the request.isAjax() method is kept as a shortcut to check the Ajax header.
FOUC with tabs has been changed to reduce HTML littering. The new technique, borrowed from LABjs, can be found here and does not require any FOUC CSS class. Any existing code will see again the FOUC until fixed, but it should not be a showstopper.
ResourcesWatchdog must be configured explicitely to enable resources reloading. This is the class that detects changes in properties, css and js files. It has moved to a manual configuration because there are environments, like AppEngine, where it cannot be started. If it is not added by the developer any changes to properties, css and js files will go undetected, forcing to a restart with every change.
Validation errors will now result in a redirect instead of a forward. It is quite unlikely that this breaks any existing code, but now, if a POST request fails it will be redirected to the source URL instead of forwarded to the source form.