Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Struts Wiki" for change 
notification.

The following page has been changed by TimFennell:
http://wiki.apache.org/struts/RoughSpots

The comment on the change is:
Added some my issues, and commented on existing ones.

------------------------------------------------------------------------------
      * [crazybob] I'll buy that. We do need to move the constants out and 
encourage users to use static import (Effective Java Item 17).
      * [plightbo] Related to this, I would encourage us to try to find a 
solution (using Bob's mix-in suggestion below, or possibly just taking 
advantage of the value stack) that would make ActionSupport much simpler. This 
would encourage using POJOs more.
      * [mrdon] Regardless whether we remove Action or not, I like the idea of 
moving the result constants out.  
+     * [tfenne] I think removing Action would be a bad idea. If you're going 
to try and get away from requiring XML configuration or listing out all your 
Actions somewhere, you'll probably want to have someway of discovering your 
Actions. An interface is the easiest option - an annotation would do too, but 
would feel a little stranger I think.
  
    1. Only put classes in root package that most users need to know about. For 
example, most don't need to know about `Default*` or `ObjectFactory`.
      * [plightbo] +1 on this - sounds like Bob has a good handle on what it 
takes to make a nice API. I'll defer to him on this.
@@ -213, +214 @@

    1. Get rid of the use of static constant variables that are used in the key 
in the stack and accessed all over the place like 
XWorkNullHandler.CREATE_NULL_OBJECTS etc. I've started to do that with the 
OgnlContextState class, but it's not complete and I'm not sure if that's the 
best way to do it.
  
  
+ == Tim's Issues ==
+ I'm new around here, so be nice ;)  I probably have a lot less WW experience 
than most, so I apologize in advance if I'm flat out wrong about some of the 
things here.
+ 
+   1. How does WW help the user with state management?  As far as I can tell, 
if I want to keep a 'user' object around I have to interact with the map 
returned by ActionContext.getSession().  Actions should in general have a 
type-safe and transparent way to do this, e.g. by subclassing ActionContext and 
providing getUser()/setUser() which store the user in session.  This allows for 
re-working of the storage strategy (e.g. write a cookie and lookup the user 
each time) without affecting actions.
+   1. In tandem with the previous point, since Actions are already stateful, 
it'd be nice to have the ActionContext injected into the Action.  One benefit 
is when a newbie developer needs it, the linkage is obvious (they don't have to 
a priori know about the ActionContext, they're being handed in it on a 
platter). If the developer can subclass ActionContext, it would also encourage 
them to implement a base action which accepts the context inject and leveraging 
the fact that JDK 1.5 allows co-variant returns, also write a getContext() 
method that returns the down-casted type; they wouldn't have to do 
((MyActionContext) ActionContext.getContext()).getUser() for example, just 
getContext().getUser().
+   1. HTML analog tags should stick to HTML attributes. I dont' mean they 
shouldn't have more functionality, but the attributes should be identical where 
possible, and they shouldn't do things like render a label and an input.  
Keeping them more like regular HTML tags makes them easier to ramp up on, and 
more non-developer friendly
+   1. Actions should return concrete objects, not symbolic results.  Symbolic 
results might have been optimal when you had one event/method per action and 
the outcomes were always whole-page views, but they get in the way now.  When 
you want to return anything that requires more than the symbol, you have to do 
some less than intuitive things to make the Action and the Result cooperate.  
I'd prefer to see a concrete Result get returned from Action methods, which 
would allows developers to do more powerful things more easily.  There are a 
bunch of ways to make it backward compatible too.  You could return 'new 
SymbolicResult("success")' and have the SymbolicResult do the lookup stuff (You 
could even redefine the String constants to be SymbolicResults).  You could 
alternatively use a static class to do Results.find(SUCCESS).  Or you could 
even allow method to continue to return String or Result, and if String wrap it 
in a SymbolicResult.
+ 
+ 
  == Nice to haves ==
  
    1. Inheritance is not a good way to reuse code between actions. One work 
around is to use the strategy pattern to swap in different implementations of 
interfaces like `ValidationAware`. It would be nice if the framework had 
built-in support for mixins using cglib or Dynaop. For example, instead of 
extending a class that implements `ValidationAware`, SAF could extend an action 
class at runtime and implement the `ValidationAware` methods by delegating them 
to another object (a mixin): {{{
@@ -255, +265 @@

      * [crazybob] Sounds good. We'll also need to handle JDK-1.5 only APIs 
(concurrency for example).
    * [Gabe] I am required to use 1.4 at work. To me the question of whether to 
require 1.5 comes down to whether the same shops that are stuck using 1.4 are 
also not going to let people use Struts 2.0, because it is too bleeding edge 
anyway. In that case it doesn't make sense to allow 1.4, because the only 
people who would be using it would also have access to 1.5 anyway. I don't know 
if that is the case though.
    * [martinc] The big issue with the JDK version is app servers. This comes 
in two parts. First is whether all of the major app server vendors have 
products available that support the desired SDK version. I believe we're OK in 
that regard with JDK 1.5. The bigger issue is customer acceptance. Enterprise 
customers, especially, tend to standardise on their app server, and they are 
not quick to upgrade. Unless the application vendor has a great deal of 
influence over the customer's infrastructure, the vendor has to live with 
whatever app server version is in use at the customer site. It is rare, then, 
that the application vendor can dictate the JDK version. On the other hand, the 
customer usually couldn't care less what version of Struts the application was 
built with.
+   * [tfenne] I think you *have* to support JDK 1.5, and it should be the 
default. If it's not too hard to provide 1.4 compatibility great, but I think 
all examples, defaults etc. should leverage 1.5. Generics allow you to do much 
more for the user without asking for configuration information. If a user wants 
to use JDK 1.5 enums, it should work, etc. etc. If it's extra work on the 
user's part to make 1.5 features work, simplicity goes out the window.
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to