Finally got a chance to look this over. Here's a few things:
1. You don't need action annotations unless you are actually doing work. You can safely hit URLs without actions and only results. I noticed that you had a empty Hello action and a number of actions inside classes that didn't do anything (i.e. login-input inside Login). My favored pattern is to keep it simple like this:
===== code ===== package actions; @Result(name="success", location="bar", type="redirect-action") public class Foo extends ActionSupport { } ===== JSP ===== WEB-INF/results/foo-input.jspLinks into the foo form reference foo-input and the form submits to foo. You can also do the GET/POST check that Rails suggests and collapse everything to just foo. In most cases I just use inline redirect actions for cancel buttons and redirect after post and this reduces the clutter even more.
2. I tend to shy away from multiple actions inside classes. For crud I use s:action for form preparation (this is actually better because it reduces overhead of preparing the form on success). For other types of forms, if I have to share logic (rarely) I use a base class, but otherwise I just make one class per URL. In most re-use cases I introduce re-usable services in a separate tier to clean out actions and make the one action per URL simpler to code.
3. Likewise, I try to avoid heavy re-use of result pages and try to stick with the convention based approach. It seems to make the code more readable and easy to get into. For CRUD I setup something like this:
==== Classes ==== List.java - Fetches the existing entities for display Prepare.java - Used only via the s:action and implements Action Edit.java - Fetches an existing entity and renders the edit form Save.java - Inserts a new entity Update.java - Updates the existing entity Delete.java - Deletes an entity or entities ==== Results ====add.jsp - Includes form.jsp and passes a parameter to set the action type (i.e. save) edit.jsp - Includes form.jsp and passes a parameter to set the action type (i.e. update)
form.jsp - The CRUD form used for insert and update list.jsp - Lists the current entitiesI'm planning on putting up a CRUD demo for SmartURLs at some point, when I get time. This will help illustrate what I'm talking about a bit more.
-bp Ted Husted wrote:
I have a first run at a Zero Configuratinn,/SmartURLs MailReader under SVN at * http://sq1-struts2.googlecode.com/svn/trunk/articles/mailreader-zero/ Everything is checked in, including the JARs (ugh!), and it should be easy to import as an IDE project. MailReader Zero uses no XML configuration, other than to set global options. It does use a lot of annotation, probably too much, but a lot of that could be resolved via additional conventions. I'd like this to be an "best practices" application, though I'm not sure if we yet know what all the best practices :), so comments and patches are welcome. I'm hoping to tag a JPA implementation on to this next. -Ted. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
smime.p7s
Description: S/MIME Cryptographic Signature