Hi Niall,

I certainly agree it would not be possible to satisfy everyone, but seeing as the intrinsic toString() is all but useless (and people do generally expect that to be the case with many classes), why not give an implementation that is of at least some use to some people? Surely it would be better than what you get now? Obviously it's something many people will override, and that's of course the whole point of inheritance. But providing even a slightly more useful default implementation (and maybe telling people it's a basic default implementation so as to try and keep the flood of bugzilla requests to a minimum) seems to me like a good idea.

I can't address your point about dynabeans because I haven't used them enough to be able to intelligently comment (which is to say I haven't used them at all! :) )... I wouodn't imagine some basic implementation would be too tough for them as well.

In any case, I will look at the toString builders you mentioned... I've come to really like using the commons packages and I try to whenever I can. This would be a good case I think, if it doesn't get added as I proposed. I already have an ActionHelpers class with a bunch of similarly-themed static methods for use from Actions, so maybe it's time to do so for forms as well.

--
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com

Niall Pemberton wrote:
Frank,

For me it wouldn't be any use unless it also handled DynaBeans. Even then
I'd end up overriding it because I have some formatting utils which do
dates, arrays and collections. Seems to me if we put it in then we would end
up with a monster trying to satisy everyones needs and forever dealing with
bugzilla requests for enhacements (someone would want an i18n version!) -
all just for debugging.

The easiest thing is to just put all that code into a utility method - that
way its only a one liner in the toString() - even better if you have your
own "base" ActionForm that all you others derive from, then its only in one
place.

Also, there are a set of "toString" builders in commons lang which you might
like to use - including a reflection one like yours:

http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/builder/package-summary.html
http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/builder/ReflectionToStringBuilder.html

Niall

----- Original Message ----- From: "Frank W. Zammetti" <[EMAIL PROTECTED]>
To: "Struts Developer" <[EMAIL PROTECTED]>
Sent: Thursday, October 07, 2004 4:29 AM
Subject: Re: Proposed Action base class change




Obviously I made a typo in the subject... this applies to the ActionForm
base class.

Did anyone have any comment on this?  I've noticed a lack of activity on
the list lately...


Hello all...

I find myself all the time overloading toString() of my ActionForms for

debugging

purposes, so I can easily dump the current state of the object. I had

been doing

this for each ActionForm class, specifically for it, but it ocurrs to me

that a

general-purpose reflection-based approach would be better.

I'd like to propose adding this functionality to the ActionForm base

class. Here's

the code I propose adding:

import java.lang.reflect.Field;
public static final AVERAGE_FIELD_SIZE = 25;
public String toString() {
 String str = "";
 StringBuffer sb = null;
 try {
   Field[] fields = this.getClass().getDeclaredFields();
   sb = new StringBuffer(fields.length * AVERAGE_FIELD_SIZE);
   for (int i = 0; i < fields.length; i++) {
     if (sb.length() > 0) { sb.append(", "); }
     sb.append(fields[i].getName() + "=" + fields[i].get(this));
   }
   str = sb.toString().trim();
 } catch (Exception e) {
   str = "Exception in ActionForm.toString() : " + e;
 }
 return str;
}

The value of AVERAGE_FIELD_SIZE is a matter of debate, and it's of

course impossible

to come up with a real value, so something reasonable is the answer. 25

struck me

as a decent starting point.

What does everyone think? I find this functionality to be very useful

in my work,

and I suspect others may as well. The code doesn't add any dependencies

outside

J2SE, and it's certainly simple enough as to not be particularly risky.

Thanks all!

Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com



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






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









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



Reply via email to