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 MichaelJouravlev:
http://wiki.apache.org/struts/SAF1RoughSpots

------------------------------------------------------------------------------
  
  == Code Issues ==
  
-   1. '''I/O conversion'''  [MichaelJ] The suckiest part of SAF1 is I/O 
conversion. !FormDef seem to solve most conversion/validation issues, so bring 
!FormDef into Struts core and consider using dynaforms with nested business 
objects as a best practice.
+   1. '''I/O conversion'''  [MichaelJ] The suckiest part of SAF1 is I/O 
conversion. [https://formdef.dev.java.net/ FormDef] seem to solve most 
conversion/validation issues, so bring !FormDef into Struts core and consider 
using dynaforms with nested business objects as a best practice.
  
-   1. '''SAF1 lifecycle'''  [MichaelJ] The lifecycle of SAF1 is quite simple, 
for a user's perspective it includes just reset/populate/validate functions. 
Consider to call all lifecycle functions explicitly from an action class, no 
more automatic population.
+   1. '''SAF1 lifecycle'''  [MichaelJ] The lifecycle of SAF1 is quite simple; 
from a user's perspective it includes just reset/populate/validate functions. 
Consider the option to call all lifecycle functions explicitly from an action 
class, no more automatic population.
      * [FrankZ] I personally would not want to see the auto-population and 
validation and such go away.  I think them being declarative is a powerful 
notion.  I DO however agree that a developer should be able to turn them off 
declaratively and do it all manually.
-     * [MichaelJ] Considering to call lifecycle functions explicitly does not 
mean removing autopopulation from the next release :)
  
    1. '''Automatic validation'''  [MichaelJ] Deprecate automatic validation, 
newbies always stumble upon the fact that their action class is not called when 
validation fails. Instead, promote explicit validation.
      * [FrankZ] Definite -1 from me.  Again, I'm +1 to being able to turn it 
on and off, but I very much believe it should be there.  Perhaps there is some 
room for better logging in the cases you mention?
-     * [MichaelJ] Deprecating autovalidation does not mean removing that 
feature from the next release :) I hope you reconsider your "-1" or do you want 
me to remove "deprecate" word entirely? I think that without autovalidation 
things will be clearer: action class will always be called, and different error 
conditions with different targets can be supported.
  
    1. '''Input attribute'''  [MichaelJ] Deprecate "input" attribute of 
"action" tag in struts-config.xml. At least, rename it to "error" or something. 
A frequent misconception is to think that the lifecycle starts with displaying 
an "input" page, which is obviously not true.
      * [FrankZ] +0.  I don't disagree with you at all, and I think there are 
probably other things that could similarly be changed.  However, I think it is 
very important that anything done with SAF1 be evolutionary and take 
backwards-compatibility into consideration in a big way.  I think if you want 
revolution you go for SAF2 (a minor revolution in that it's theoretically still 
compatible) or Shale.
-     * [MichaelJ] Hey Frank, now ''you'' are writing me off the boat? ;) What 
if I want some revolution staying within SAF1 codebase?
  
    1. '''Form attribute'''  [MichaelJ] Add "form" attribute with the same 
meaning as "name" attribute; deprecate "name".
      * [FrankZ] +0.  Same comment as the above point.
-     * [MichaelJ] Again, "add" means add. It does not mean removing "name" in 
the next release.
  
    1. '''Differentiate forward from redirect in mappings'''  [MichaelJ] 
"forward" tag implements both forward and redirect, this is confusing. 
Implement two separate tags like "render" for forward and "transfer" for 
redirect. "forward" tag still can be kept for compatibility purposes.
      * [FrankZ] Hmm, I'm not sure how I feel about that.  Maybe simply adding 
a type attribute, ala Webwork, would do the trick?  "forward" or "redirect" as 
values?
@@ -46, +42 @@

  </component> 
  }}}
  
- This mapping use new format for action mapping. "component" is essentially 
"action" with different defaults and some new elements. This is 1:1 
correspondence between mapping and action class. Same action class handles 
input phase as well as render phase (I saw your remark about 
Redirect-After-Post, here it is, implemented).
+ This mapping uses the action mapping format introduced in Struts Dialogs 
project. A "component" is essentially an "action" with different defaults and 
some new elements. This is 1:1 correspondence between mapping and action class. 
Same action class handles input phase as well as render phase (I saw your 
remark about Redirect-After-Post, here it is, implemented).
  
    1. '''!DispatchActions'''  [MichaelJ] Having that many dispatching actions 
in the distro, all of them but !EventDispatchAction and more generic 
EventActionDispatcher should be deprecated.
+     * [MichaelJ] On a second thought, let's make all actions to be 
dispatching actions. If event is recognized for an action, it is dispatched to 
a corresponding method. If event is not found in the request, then execute() is 
called like for a regular action.
  
    1. '''Tiles improvements'''  [MichaelJ] Improve Tiles to support real 
components, that can be fully independent of composite page, can process user 
input, and can render themselves.
  
    1. '''Per-request Action instantiation'''  [FrankZ] Actions should be 
instantiated for each request, therefore removing the thread safety concerns 
that exist today.
-     * [MichaelJ] +0. Not sure that this bothers me anymore :)
+     * [MichaelJ] -0. Not sure that this bothers me anymore, especially if 
dynaforms will be adopted as standard practice. In this case a dynaform would 
be a container for a nested business object. I would rather combine Action and 
!ActionForm and have an option to choose scope just right now a scope can be 
chosen for an !ActionForm. That is, I am against strictly per-request actions.
  
    1. '''Pure POJO !ActionForms'''  [FrankZ] An !ActionForm should not need to 
extend !ActionForm.  The framework would have to be smart enough to not call 
validate() and such in that case.  This would allow for the Action to be the 
!ActionForm as well, and this is really the underlying goal because many people 
view them being separate as a rough spot.
      * [MichaelJ] Definite +1
  
-   1. '''Built-in AJAX support'''  [FrankZ] I am not entirely sure what the 
best form for this is, although I believe the !AjaxTags paradigm still has a 
great deal of merit.  In any case, in today's world, not offering some degree 
of AJAX out of the box is probably a rough spot for many.
+   1. '''Built-in AJAX support'''  [FrankZ] I am not entirely sure what the 
best form for this is, although I believe the 
[http://struts.sourceforge.net/ajaxtags/index.html AjaxTags] paradigm still has 
a great deal of merit.  In any case, in today's world, not offering some degree 
of AJAX out of the box is probably a rough spot for many.
-     * [MichaelJ] I believe that I can combine JSP Controls Tag Library with 
Tiles, building both a real component subframework on top of Struts, as well as 
built-in Ajax features (actually, AHAH. It is coarse-grained in-place update of 
a component within a composite page. Therefore, I believe that it can coexist 
nicely with more finegrained approach of !AjaxTags).
+     * [MichaelJ] I believe that I can combine my [http://www.jspcontrols.net/ 
JSP Controls Tag Library] with Tiles, building a real component subframework on 
top of Struts, having built-in Ajax features as well (actually, AHAH. It is 
coarse-grained in-place update of a component within a composite page.) I 
believe that it can coexist nicely with more finegrained approach of !AjaxTags. 
Is it possible to combine AjaxTags with JSP Controls? My goal was to make sure 
that components work even if Javascript is turned off.
  
    1. '''Custom attributes on tags'''  [FrankZ] All Struts tags that render 
HTML should allow for arbitrary attributes.  I again propose a "specCompliant" 
attribute on the <html:html> tag.  When true, no arbitrary attributes are 
allowed (this would be the default if the attribute is not present).  If false, 
any attribute can be added.  This has been a hassle for me a couple of times 
where I wanted to store some custom information on a tag for client-side 
purposes.
+     * [MichaelJ] +1
  
    1. '''The ability to switch off auto-form population'''  [FrankZ] The idea 
here is that Struts would still instantiate an !ActionForm and call reset(), 
but that's it.  This can be useful if you want to use an !ActionForm only as an 
output object, but want to handle input manually.  This came up for me 
converting a non-Struts app to Struts, where there was no notion of an 
!ActionForm in the previous framework.
+     * [MichaelJ] +1 I even had the 
[http://issues.apache.org/bugzilla/show_bug.cgi?id=38620 ticket] opened for 
this issue, but as Martin Cooper pointed out, this can be achieved simply by 
not associating the form with setup action. On the other hand, having form name 
explicitly in the action mapping makes config file more readable.
  
-   1. '''Built-in dependency injection''' [FrankZ] This should be modeled 
after what is offered in JSF.  If we took the code from the !DependencyFilter 
in Java Web Parts, added in true injection (shouldn't be a terribly big deal), 
I believe we would have even better capabilities than in JSF.  Spring is of 
course still out there for those that need/want more!  This may not be so much 
a rough spot as just a fairly low-hanging piece of fruit (because most of the 
work is already done by virtue of leveraging !DependencyFilter) that I think 
people would appreciate having.
+   1. '''Built-in dependency injection''' [FrankZ] This should be modeled 
after what is offered in JSF.  If we took the code from the !DependencyFilter 
in [http://javawebparts.sourceforge.net/ Java Web Parts], added in true 
injection (shouldn't be a terribly big deal), I believe we would have even 
better capabilities than in JSF.  Spring is of course still out there for those 
that need/want more!  This may not be so much a rough spot as just a fairly 
low-hanging piece of fruit (because most of the work is already done by virtue 
of leveraging !DependencyFilter) that I think people would appreciate having.
  
    1. '''!ThreadLocal !ActionContext''' [FrankZ] Yes, I think this is one 
place we should flat-out rip off Webwork :)  Backwards-compatibility would have 
to be considered, but I'd like Actions to have to deal with a single object, 
and for that object to be accessible via the !ThreadLocal mechanism.  This 
should also open the door for POJO Actions.
  
    1. '''Built-in support for RAP (Redirect After Post) pattern''' [FrankZ] 
I'm not sure how best to accomplish this, but this should be a very easy thing 
for a developer to do, the framework should do any required heavy lifting.  
Again, not so much a rough spot as it is something I think a lot of people 
would appreciate.
-     * [MichaelJ] Redirect-After-Post is fully implemented in Struts Dialogs 
1.x (last version is 1.24). After Struts 1.2.9 got better dispatch action, I 
stopped advertising Struts Dialogs project, but it is still valuable in terms 
of samples. Check it out. !EventDispatchAction can implement 
Redirect-After-Post as well, Paul and I spent quite some time discussing how 
!EventDispatchAction can be used for both input and render phases.
+     * [MichaelJ] Redirect-After-Post is fully implemented in 
[http://struts.sourceforge.net/strutsdialogs/index_v1.html Struts Dialogs 1.x]. 
After Struts 1.2.9 got better dispatch action, I stopped advertising Struts 
Dialogs project, but it is still valuable in terms of samples. Check it out. 
EventActionDispatcher and !EventDispatchAction can implement 
Redirect-After-Post as well, Paul and I spent quite some time discussing how 
!EventDispatchAction can be used for both input and render phases.
  
    1. '''Pre and post-processing abilities''' [FrankZ] A developer should be 
able to specify a class and method to call before and after an Action executes, 
on a per-mapping basis.  This should be independant of modifying a chain.  
Should just amount to adding the appropriate config file changes and two 
commands to the default chain.  This is for handling things like common setup 
of view-type Actions, etc.
      * [MichaelJ] +0. I prefer having 1:1 correspondence between mapping and 
action class. With autopopulation out of the way, I can call whatever I want 
right in the beginning and at the end of execute() method. Same thing, but 
simpler, I think.
@@ -96, +95 @@

  
    1. '''Dispatch-type actions should be more front-and-center'''  [MichaelJ] 
Dispatch-action style request processing should become a cornerstone technique 
instead of "yet another way of doing things". It works especially well in data 
entry form processing or menu processing. See DataEntryForm.
      * [FrankZ] As an oft-stated opponent, GENERALLY, of Dispatch-type 
Actions, I wouldn't be thrilled with this being sold as a "best practice".  I 
would have no problem with it being described in more detail and the pluses and 
minuses stated for people to be able to make a more informed decision either 
way.
-     * [MichaelJ] If you stop thinking in JSP pages, and start thinking in 
terms of resources that accept commands, then dispatch action comes as a 
natural fit.
  
    1. '''Preference for session-scoped !ActionForms'''  [MichaelJ] Best 
practices should explain that there is nothing wrong in having session-scoped 
action forms. Best practices should teach how to build stateful web resources.
      * [FrankZ] -1.  Saying there is "nothing wrong" with it, I do not believe 
is true.  Speaking as someone who works all day in a large distributed 
enterprise environment, I am very well aware of the pitfalls of storing things 
in session and in letting session get too big.  I'm not saying I never store 
anything in session, of course I do! :)  But I think people need to know the 
positives and negatives of doing so and decide what is appropriate in a given 
use case rather than being told this or that is a "best practice".
-     * [MichaelJ] My original wording did not have "preference". What I am 
saying is that session-scoped forms should not be a taboo, and their benefits 
should be cleanly explained. Would you reconsider your "-1"?
+     * [MichaelJ] My original wording did not have "preference". What I am 
saying is that session-scoped forms should not be a taboo, and their benefits 
(as well as pitfalls) should be clearly explained.
  
    1. '''Building stateful components'''  [MichaelJ] It is possible to build 
stateful and independent web components with SAF1. Best practices should teach 
how to do that.
  
    1. '''!ActionForm as true I/O buffer'''  [MichaelJ] !ActionForm should be 
used as I/O buffer instead of simply collecting user input from request.
      * [FrankZ] Could you explain this further?  I'm not at all clear on what 
you mean.
-     * [MichaelJ] This is that 60% of Struts users do. I guess you do it as 
well. You have actionform associated with input action. You submit a form, 
actionform is populated. In case of error or whatnot you render the same JSP 
page a pull the data from the actionform, it is already there, saved for you by 
Struts. I use this all the time for data entry use case, but this does not seem 
to be an officially endorsed practice.
+     * [MichaelJ] This is what 60% of Struts users do anyway. I guess you do 
it as well. You have actionform associated with input action. You submit a 
form, actionform is populated. In case of error or whatnot you render the same 
JSP page and pull the data from the actionform, it is already there, saved for 
you by Struts. I use this all the time for data entry use case, but this does 
not seem to be an officially endorsed practice.
  
    1. '''Use of nested properties'''  [MichaelJ] Emphasize using of nested 
properties, using business objects as nested properties, using dynaforms 
holding business objects.
  

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

Reply via email to