Does Struts 2 suck?
As far as I can tell, Struts 2 sucks. To be fair, so does Stripes. Why? Because there's no developer feedback for invalid properties or OGNL Expressions. What does this mean? It means if you fat-finger a property name, nothing happens. The OGNL exception is swallowed and you never know you did anything wrong. Furthermore, no one seems to care. The XWork folks will help you build, but not solve the problem. This seems like a major deal-breaker to me, However, I also believe it can be fixed - so maybe there's hope.
To demonstrate the problem, I did an experiment. I used the "user details" page in AppFuse Light to fat-finger a property name for the following frameworks: Struts 1, WebWork, Struts 2, JSF, Spring MVC, Stripes, Tapestry and Wicket. First, I tried changing the "lastName" property to "LastName" to see if the framework's property evaluation was case-sensitive. I found that with WebWork/Struts 2, Stripes and Tapestry, the property is not case-sensitive. I prefer case-sensitivity, but maybe that's because I prefer Unix over Windows.
The 2nd thing I tried was changing "lastName" to "pastName" to see if I'd get an error. An error occurred for all the frameworks mentioned, except for WebWork/Struts 2 and Stripes. This makes me believe these frameworks suck. The both use OGNL, so they could blame it on that, but Tapestry uses OGNL and it presents an error message. After this small experiment, my conclusion is the following frameworks have the best developer feedback:
- Struts 1
- JSF
- Spring MVC
- Tapestry
- Wicket*
* Wicket seems like it needs some work as all it presents is "Internal Error" and makes you dig through your log files to find the problem.
Without good developer feedback, how can you have good productivity?
Dear Struts 2 and Stripes Developers,
What do you think about improving your error messages for invalid properties and expressions? Is this a feature you think you could add? We'd love it if you did.
Sincerely,
Your Users
Click here for some screenshots of how a fat-fingered property looks in various frameworks:
Update: Stripes doesn't suck and Wicket has excellent error reporting. See my comment below for more details.
Update 2: I've created a patch to (hopefully) solve this issue in XWork. If you have any feedback on ways to improve this patch, I'd love to hear about it.