Long ago I used Struts for development until SOFIA (Salmon Open Framework For Internet Applications) arrived in mid 2002 (SOFIA development started in year 1999 by SalmonLlc and was later published as opensource).
) is an opensource J2EE and MVC based development framework that gives the developer lots of productivity features. To mention some:
- Visual development of UI by integrating its pallet of more than 40 visual components (ex:DataTable with sort and paging options included ,Navigation Bar, Tree, Calendar, Input ) with Macromedia?s Dreamweaver.
- Integration to Intellij and Eclipse.
- Code generators for many nonvisual tasks such as database access and controllers that provide event handling of view actions (implemented the same way that AWT ones).
- Automatic binding of the model to any view component. Ex: You can build a DataStore (Database Model) then build a view with input components, bind that input components to the DataStore and when you call the update method of the DataStore changes are automatically reflected on the database and all this without having to code a single line of java code.
- Clear separation of the design of UI from Java code development. If you look for example at the JSP code of SOFIA pages you will see only JSP tags that represent visual components (zero Java inline code and no tags that in the end try to simulate java code like iteration or conditions tags).
- Power to manage any attribute of any view component at runtime. Ex: You can disable a view component depending on a complex condition that you declare in a separate Java class or in a declarative way.
- Easy implementation of new JSP tags: you don't have to follow the whole JSP specification to build a new tag. Just extend SOFIA components and the development of a new tag makes life much easier.
- Complex validation rules at the model level. View Validators then import the rules having the power to specifiy (depending of the kind of rule) if it should be done at the client or the server side.
- i18n: use of localization keys that can be specified on some of the SOFIA components and tags that will cause some of the attributes of the
components to change based on the language preferences of the visiting user.
- Output to different devices: HTML / WML / Swing
My personal experience with SOFIA if I compare it for example with Struts is that now I concentrate only in the business requirements and not in the framework details, having gained a lot of productivity and also tidyness of the final code.
As Tapestry seems to be other of the players in the area of J2EE opensource development frameworks, I would like to know from the Tapestry Team, how would you compare it to SOFIA ?