All,
I've just released 1.1-beta 3. It contains the first cut of the
IPageable interface change, and it is the first release after the
validation changes. Please test this release and see how we can possibly
improve on these parts.
We want to finalize the 1.1 branch as soon as possible, but not without
sacrificing quality. So please help us test this release and send in
your bug reports.
The sooner we finalize 1.1, the sooner we can focus on 1.2 and bring you
Ajax, Portlets and all other nice things.
Announcement:
==========
The wicket team is pleased to announce the Wicket 1.1-b3 release!
http://wicket.sourceforge.net
Wicket is a Java web application framework that takes simplicity,
separation
of concerns and ease of development to a whole new level. Wicket pages
can be
mocked up, previewed and later revised using standard WYSIWYG HTML design
tools. Dynamic content processing and form handling is all handled in Java
code using a first-class component model backed by POJO data beans that can
easily be persisted using your favourite technology.
Changes in this version include:
New Features:
o Added debug toString() methods to all models in wicket.model Issue:
1260304. Thanks to Dariusz Wojtas.
o Added MarkupContainer.iterator(Comparator comparator)
o Changed StaticResourceReference and StaticResource to
PackageResourceReference and PackageResource, then added an Application
parameter to each to make that explicit. Added IComponentInitializer
method
that is called in Application constructor for each class listed in
META-INF/wicket-component-initializers.txt. This will allow component
developers to initialize resources when the app starts up. For
applications, you can also create a
META-INF/[ApplicationName]-wicket-component-initializers.txt if you
want to
preload resources or otherwise initialize for pages. Made changes to
ImagesApplication to demo this, including an example that preloads the
cancel button via
META-INF/ImagesApplication-wicket-component-initializers.txt
o Added min, max and length parameters to the error message
interpolation of
LengthValidator
o Added WebSession.getId() and WebRequestCycle.getWebSession()
o added AbstractReadOnlyModel Issue: 1250030. Thanks to Igor Vaynberg.
Fixed bugs:
o Refactored PackageResource to not depend on package anymore. Package
provides the wrong classloader (if any) for loading the resource. It now
uses the scope class, which is consistent with the rest of our resource
story. Issue: 1263801.
o AbstractDetachableModel doesn't propogate attach/detach Issue: 1253113.
Thanks to Cameron Braid.
o Javadoc missing for AbstractChoice Issue: 1247719. Thanks to Gili
Tzabari.
o ListMultipleChoice doesn't support maxRows Issue: 1253999.
o PageParameters doesn't escape markup in values Issue: 1259701. Thanks to
Francis Amanfo.
o Can't have two FeedbackPanels - fixed in conjunction with 1219458 Issue:
1263096. Thanks to Simon Berriman.
o FeedbackPanel produces illegal HTML - The initial state of the
FeedbackPanel produces empty ul open and close tag since there is no
initial message to display. This is illegal HTML according to the HTML
validator (XHTML strict mode). Issue: 1219458. Thanks to Gili Tzabari.
o Fixed WicketServlet.doGet URI bug Issue: 1261052 . Thanks to Jan Bares.
o fix for classloading problems that caused problems loading markup/
resources for components that were loaded by another classloader than the
current one.
o Fix HTML generated from AbstractChoice - Added missing space after
'option
selected="selected"' Issue: 1249961. Thanks to Cameron Braid.
o AbstractDetachableModel didn't propogate attach/detach Issue: 1253113.
Thanks to Cameron Braid.
Changes:
o Extended markup inheritance to support panels and borders as well
o Added getBoolean() to ValueMap Issue: 1254379. Thanks to Phil Kulak.
o Made LoadableDetachableModel.getNestedModel() non final Issue: 1253111.
Thanks to Cameron Braid.
o Changed implementation of component map in MarkupContainer to an array
model like the validators changed. This made a significant reduction
in the
size of pages, especially big pages. For example, nested shrank from
69,958
bytes to 55,231 bytes which is a savings of 14,727 bytes that was due to
HashMap overhead. Very large containers may run slower, but most
containers
are likely to be faster as should be recursion/iteration. The main
downside
is that this code is very ugly and involves the same kinds of tests and
casts that we did to make the validators implementation more space
efficient.
o refactored feedback completely. the new code is smaller, more powerful
and
more elegant. but it will break clients. most clients who are using
simple
features of the old feedback code will only have to (a) change their
package imports from wicket to wicket.feedback (because the feedback
stuff
is several more class files that are polluting the root package and
likely
to grow due to the new filtering mechanism) and (b) delete any IFeedback
argument to Form. clients who are looking for more powerful ways to
filter
their messages will now have completely unlimited capacity to do so
through
the new IFeedbackMessageFilter interface and the default filter
implementations ComponentFeedbackMessageFilter,
ContainedByFeedbackMessageFilter and ErrorLevelFeedbackMessageFilter. the
whole model for feedback messages has changed from one of
component-orientation, which was a mistake, to one of message
orientation.
to give feedback, a feedback component implements the new IFeedback
interface which contains just updateFeedback(). in this method, which is
called before the page is rendered, the component can use the
FeedbackMessages.messages() method in combination with a filter
implementing IFeedbackMessageFilter to retrieve a list of appropriate
messages. all feedback messages on the page are pushed through this
filter.
messages for which IFeedbackMessageFilter.accept() returns true are added
to the list. for example, the new FormComponentFeedbackBorder uses the
ContainedByFeedbackMessageFilter in its call to
FeedbackMessages.messages(). The filter being used by the form component
feedback border can be changed by overriding the
getFeedbackMessagesFilter() method. This combination allows
FormComponentFeedbackBorder to show its error indicator by default when a
component that it contains has an error, but allows the user to override
this behavior. another example is provided in
FormComponentFeedbackIndicator, which is a panel showing a red star (and
overridable with you own markup!) that shows or hides itself depending on
the result of the filter returned by the overridable
getFeedbackMessageFilter() method. if the filter accepts at least one
message, the indicator will show itself. if no message matches the
filter,
the indicator will hide itself. note that feedback message filters do not
necessarily have to have anything to do with components. you can install,
for example, an ErrorLevelFeedbackMessageFilter which filters out
messages
below a certain threshold. or you can make a custom filter that uses any
attribute of FeedbackMessage to filter on. the new FeedbackPanel also
provides a getFeedbackMessageFilter() override.
o Maximized efficiency of validators list by doing a little neat object
casting in the private implementation. This also simplified things
conceptually.
o Made FormComponent more space efficient by using boolean flag bit in
Component superclass to keep track of persistent boolean.
o Changed RequestCycle.internalOnRuntimeException() implementation so
that it
checks the new Page return value from onRuntimeException. if
onRuntimeException returns a Page, it will be redirected to. if not,
wicket
will use the default page. this provides a nice low-level way of doing
something totally different to handle runtime exceptions. if you just
want
to change the basic look of your InternalErrorPage, you can still just
subclass that. but if you want to do sophisticated things with runtime
exceptions, you want to override RequestCycle's onRuntimeException
method.
o Refactored intializer code. Now wicket.properties is checked for each jar
or root folder on the classpath. If it contains either
initializer=[class]
or [app-name]-initializer=[class], that class is instantiated and the
IInitializer.init(Application) method is called on the resulting object.
So, both libraries and applications can easily initialize their resources
now. For example, the core wicket.properties file contains just this:
"initializer=wicket.Initializer", which invokes the wicket.Initializer
class with the application being loaded. The wicket.Initializer.init()
method will contain a sequence of initializations. For example, "new
TreeComponentInitializer().init(application)". This is a much better and
safer and more Java way of initializing components for a library like
core.
Updated the images example to show how this is done.
o Changed structure of process() back to its original no-parameter form and
introduced a nice, logical return value in onFormSubmitted to determined
whether to call delegateSubmit().
o HtmlHeaderContainer to supports markup inheritance. Issue: 1255293.
Thanks
to Gili Tzabari.
o Added automatic multiPart support to Form. You can still call
Form.setMultiPart() if you want to, but it is no longer necessary. Issue:
1255297.
o allow protected access to AttributeModifier's replacement model Issue:
1249929. Thanks to Igor Vaynberg.
Have fun!
-The wicket team
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user