Stripes Blog

Stripes 1.5.3 Released

Version 1.5.3 of Stripes has been released. It is a bug fix release and addresses several issues with Stripes 1.5.2.

Stripes is a Java web application framework that focuses on ease of use and developer productivity.

Stripes 1.5.2 Released

Version 1.5.2 of Stripes has been released. It is a bug fix release and addresses several issues with Stripes 1.5.1.

Stripes is a Java web application framework that focuses on ease of use and developer productivity.

Stripes 1.5 is available for immediate download. Some of the major enhancements and bug fixes include:

  • Even less configuration! Using the new Extension.Packages configuration parameter, Stripes can automatically locate and use your extensions (TypeConverter, Formatter, ExceptionHandler, ActionBeanContext, etc.). Most applications can now be configured with just two parameters: Extension.Packages and ActionResolver.Packages. Use the @DontAutoLoad annotation to tell Stripes to ignore an extension class.
  • Clean URLs. Just declare URI parameters using, for example, @UrlBinding("/SomeBean/{foo}/{bar}.action") on your ActionBean. The parameters will appear as normal request parameters and will be validated, converted, and bound just like normal request parameters, too. Clean URLs are fully supported by s:link, s:url, and s:form.
  • DynamicMappingFilter (DMF) allows you to skirt the limitations of URL-mapping for servlets, making it great for use with clean URLs. For more information, see the DMF Javadoc.
  • Binding access control. Annotate your ActionBean class with @StrictBinding to restrict binding only to those properties you wish to allow. @StrictBinding works with @Validate to determine which properties may be bound to. For special cases, the annotation also supports the "policy," "allow," and "deny" elements. More information can be found in the Javadocs.
  • Optional _sourcePage for links. By default, the _sourcePage parameter is no longer appended to URLs generated by s:url and s:link. This can be overridden with addSourcePage="true". The _sourcePage parameter is still included in forms.
  • Easier Formatters and TypeConverters. In addition to improvements to the TypeConverterFactory and FormatterFactory APIs, Formatters and TypeConverters can now be loaded using autodiscovery (see above), eliminating the need to extend DefaultTypeConverterFactory and DefaultFormatterFactory. DefaultFormatterFactory has been improved so that it now provides support for inheritance and interfaces. For example, if a Formatter for List is registered, that formatter will be used for any type that implements List.
  • DateTypeConverter improvements. A lot of work was put into making DateTypeConverter more robust.
  • Transparent encryption of ActionBean property values. You can now use @Validate(encrypted=true) to cause ActionBean property values to be encrypted before being written to a page in a link or form input. This is meant for cases where you want to send a value back to the server with assurance that it is the same value that was written by the server.
  • Validation error report. If an ActionBean is called and there are validation errors and no _sourcePage is given, Stripes will generate a nicely formatted report detailing the validation errors that occurred. This is a vast improvement over the StripesRuntimeException that used to be thrown, with no information as to what went wrong.
  • New s:format tag can be used to format an object using a Formatter.
  • Tags and Resolutions use Formatters. Where String.valueOf(object) used to be called, Stripes will now attempt to format the object using a Formatter and use String.valueOf() only as a last resort.
  • @DontBind annotation to completely bypass both binding and validation for an event.
  • @DontValidate no longer fails due to type conversion errors.
  • Automatic detection of file upload provider. You can select your file upload implementation just by dropping it in. Commons-FileUpload takes precedence over COS if both libraries are present.
  • Partial forms. The s:form tag supports a new attribute partial="true|false" that allows for partial forms nested inside another form tag. This facilitates AJAX code that returns HTML snippets to the client that might contain form inputs.
  • Encrypted _sourcePage. The _sourcePage parameter is encrypted to prevent revealing sensitive information about the structure of the app.
  • Context-relative URLs. The s:link and s:url tags have a new attribute, prependContext="true|false", that can be used to generate URLs relative to the app context (when set to false). Relative URLs can be used with JSTL tags much more easily.
  • Client cache control. The new @HttpCache annotation can be applied to an ActionBean class and/or event handler method to control how the client caches the response. Annotations on methods override those on classes and the annotation is inherited from superclasses. This is especially useful for AJAX calls from IE.
  • Property labels with annotations. @Validate(label="Some property label") can be used during development to easily label ActionBean properties without having to add them to the resource bundle. Values from the resource bundle override those from the annotation.
  • Automatic maxlength on text inputs. The maxlength attribute of a text input is automatically set if a value is specified by @Validate(maxlength=X).
  • s:form supports s:param. Parameters can be added to a form URL by included s:param tags within the s:form tag. This is mostly intended for use with clean URLs, but it works with normal parameters as well.

There are many more. The full list can be found in the JIRA Changelog

This release is not completely backward compatible with Stripes 1.4. Some changes to your code and configuration may be necessary. The file upgrading.txt in the Stripes distribution bundle explains the incompatibilities and potential pitfalls.


Stripes 1.4.3 Released

Stripes 1.4.3 has been released and is available for download as of May 15, 2007. This is a bugfix release and is backward compatible.


Stripes 1.4.3 can be downloaded immediately from the Download page.

JIRA Changelog

jiraissues: Unable to determine if sort should be enabled.
Stripes 1.4.2 Released

Stripes 1.4.2 has been released and is available for download as of November 10th 2006. The release is primarily a bug-fix release and if fully backwards compatible with previous releases.


Stripes 1.4.2 can be downloaded immediately from the Download page.

JIRA Changelog

jiraissues: Unable to determine if sort should be enabled.
Stripes 1.4 Released

Stripes 1.4 includes new features and major improvements in several areas, as well as many smaller improvements and bug fixes. Stripes 1.4 is backwards compatible with previous releases.

Major Changes

  • Character Set Handling: Using a simple syntax it is now possible to specify the character set encoding to use for each Locale that a Stripes application supports, and Stripes will ensure the encoding is used for a interactions with both the request and response
  • Advanced Generics: Support for advanced generic type information in property binding, including nested generics declarations (e.g. Maps of Maps of Lists), type variables (e.g. List<T>) and wildcard types (e.g. List<? extends Number>
  • Support for Includes: Stripes now fully supports invoking ActionBeans through includes
  • Pluggable File Upload Support: File upload/multipart parsing code is now pluggable. Built in implementations include COS and Commons File Upload
  • Improved Spring Integration: Stripes can now inject beans using Field access (as opposed to property/method access). In addition Stripes can also now inject Spring beans using non-public methods and fields where requested
  • No More OGNL: Removal of the dependency on OGNL

The removal of OGNL has significant benefits for users. Most obviously Stripes has one fewer dependency, which means easier installs and upgrades (Stripes is now down to two external dependencies). In addition the re-implementation of the (small) subset of OGNL features used internally by Stripes has led to significant performance improvements. But perhaps most compelling is the fact that Stripes can now handle situations that were awkward at best and impossible at worst with OGNL, including significantly better handling of Java 1.5 generics.


Stripes 1.4 can be accessed from the Download page.

JIRA Changelog

jiraissues: Unable to determine if sort should be enabled.
Stripes 1.3 Released

Stripes 1.3 includes new features and major improvements in several areas, as well as many smaller improvements and bug fixes. Stripes 1.3 is backwards compatible with previous releases.

Major Changes

  • Change to Apache License: Starting with 1.3 Stripes is distributed under the Apache License (version 2). The Apache License is significantly less restrictive than the previous LGPL, and is more broadly acceptable in commerical environments.
  • Expression Based Validation: Validations can now be written in the JSP Expression Language (EL). The expression is specified in the validation annotation along with other validations. E.g. @Validation(expression="this < 10 || this > otherField").
  • Custom Validation Semantics: ActionBeans can now have more than one custom validation method, and additional control can be asserted over when the validation is run. Validation methods are marked with @ValidationMethod. Attributes allow the developer to specify the ordering of validation methods, which events to run them on and whether to run them or not if errors exist prior to execution.
  • Validation Filtering By Event: Required field validations can now be filtered by event. Where previously validation was all-or-nothing for an event, it is now possible to fine tune validations by specifying that a field is required only for a particular event or events, or is required for all events except specified events.
  • Exception Handling System: A new ExceptionHandler interface is used to handle any unhandled exceptions raised anywhere in the application. The primary benefit of this system is to be able to execute arbitrary java code on exceptions instead of simply rendering a view.
  • Interceptor System: Stripes now includes a generic Interceptor system. The request processing lifecycle is defined by the LifecycleStage enumeration, and it is possible to interceptor around any/all lifecycle stages easily. An example interceptor ships with Stripes that enables before/after methods within ActionBeans.
  • URL Alternatives: It is now possible to specify fully qualified class names or provide Class objects almost anywhere the system expects a URL. While not everyone will like this is provides significant flexibility to change URLs without impacting other classes and views.


Stripes 1.3 can be accessed from the Download page.

JIRA Changelog

jiraissues: Unable to determine if sort should be enabled.
Stripes 1.2.2 Released

Stripes 1.2.2 has been released. This version is a minor bug fix version that includes fixes for two known bugs as well as two small improvements:

  • STS-115 - Incorrect creation of client browser URL while using RedirectResolution within ActionBean Handler method.
  • STS-119 - TypeConverters cannot produce arrays of Collections from a single parameter value
  • STS-120 - Reparent the SpringAwareActionResolver under NameBasedActionResolver
  • STS-121 - New TypeConverter for converting a single field value into multiple values

To download this release please visit the Download page.

Stripes 1.2.1 Released

Stripes 1.2.1 has been released.  This version is a minor bugfix version that fixes four known issues from the 1.2 release. The bugs fixed are:

  • STS-110 - FlashCope fails after session invalidation
  • STS-111 - Stripes 1.2 doesn't work with Spring unless you go through an ActionBean first
  • STS-112 - FormTag doesn't always preappend the contextpath
  • STS-114 - URLBuilder does not create valid XHTML
Stripes 1.2 Released

Stripes 1.2 Release Notes

Stripes 1.2 contains several major areas of new functionality as well as many smaller enhancements and bug fixes. The 1.2 release number is meant to indicate the inclusion of major new functionality and not a break in backwards compatibility.

Major new functionality

  • Wizard Forms: A new system for automatically handling wizard (multi-page) forms. State is automatically persisted between pages in a way that is secure and multi-window safe. Furthermore validation is run only for those fields that were present on the page at rendering! For details see the new Wizard Forms How To.
  • Flash Scope: The new flash scope is used to make objects from the current request cycle available to the next request cycle (in the same window). It is extremely useful in enabling redirect-after-post semantics without losing all the information generated by the post. For details see the State Management How To.
  • Action Resolution using Names: A new ActionResolver implementation, NameBasedActionResolver. This resolver maps urls to classes intelligently based on class (and package) names, and maps events to methods based on method names. Where present annotations will override the name-driven mappings. In addition the NameBasedActionResolver is simple to extend to introduce new rules for url and event mapping.
  • Pluggable Tag Repopulation: Value population and re-population for form field tags is now handled by a configurable component, making it easy to change the behaviour. For details see the Configuration Reference page or refer to the JavaDoc for PopulationStrategy

Other enhancements and changes

  • Validation annotations can now be placed on private fields in addition to public getter/setter methods
  • Annotations in child classes will automatically override those in parent classes
  • The @Validate annotation now supports minimum and maximum value checking for all numeric types
  • Built in numeric type converters now automatically handle currency and parenthetical-negative values
  • A new Email type converter (requires JavaMail which is not distributed with Stripes)
  • Ability to have Validatable.validate() called even when validation errors exist
  • Improved generation of "friendly" property names when localized names are not provided
  • Default form method is now POST
  • RuntimeConfiguration is now the default Configuration

Bug fixes

  • HTML event attributes are now correctly specified for stripes:form in the TLD
  • Component type of deeply nested collections is now recognized correctly
  • Bugzooky app now renders correctly in Internet Explorer (an IE XHTML bug was causing it to fail)
  • Made handling of URLs (specifically when to prepend context path) consistent between stripes:form and stripes:link tags
  • Removed all uses of Class.forName() and replaced with getContextClassLoader().loadClass()
Stripes 1.1.2 Released

Stripes 1.1.2 has been released. It includes numerous bug fixes, improvements and new features. For details on the contents of the release please refer to JIRA:

jiraissues: Unable to determine if sort should be enabled.