You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Weber, Neil" <Ne...@nike.com> on 2001/08/27 22:56:03 UTC

Question about the use of enumerated types in struts

Is there an intended usage model in struts for C++-like enumerated type
classes ala LabelValueBean?

Read no further if you understand the question.

In the application I'm working on I have several C++-like enumerated type
classes.  For example, I have one class called WidthType for which there are
WIDE, MEDIUM, and NARROW objects.  These are very similar to the
LabelValueBean class in the struts example.  One major difference though is
that the objects come from the database.  Each object has a unique id which
I consider to be the "value."  That is, two enumerator objects are equal if
they have the same id.

In my screens, I'd like the user to choose from the set of values via
ComboBox.  I looked at the struts example to see how to do this in struts.
It looked like the approach was to add a "width" property to my ActionForm
of type WidthType and use the <html:select> tag.  I tried this and
encountered two problems.

The first was with the generation of the <option> tags: the current value
wasn't marked as selected.  I investigated this and discovered that the
selectTag code records the current value as a String not as a WidthType.
So, when the optionsTag compares each value against the current value it
fails because of trying to compare a String against a WidthType.

The second problem was with copying the submitted form data back into my
ActionForm.  The value of the selected width is actually the object id, but
it's represented as a String not a WidthType.  So, the writeMethod.invoke()
call in PropertyUtils.setSimpleProperty() throws an
IllegalArgumentException.  As I see it, I have to make "width" a WidthType
because in my actual bean it's a WidthType.  If the two properties differed
in types, I wouldn't be able to use PropertyUtils.copyProperties() to
populate my bean.

My question is, am I doing this wrong or is this something that struts
hasn't addressed yet.  If I'm doing it wrong, what is the intended way?

Thanks,
Neil




Re: Question about the use of enumerated types in struts

Posted by John Raley <jo...@moonlight.com>.
This problem comes up with Date fields every now and then.  Basically 
you have two properties: one with type String and one with type 
WidthType.  The String property is backed by a WidthType (i.e. there's 
no String inside the form object - getWidthAsString() converts the 
WidthType on the fly, and setWidthAsString() converts immediately to a 
WidthType).  In the JSP use the widthAsString property, in the Action 
use the widthAsWidthType property.

Weber, Neil wrote:

>Is there an intended usage model in struts for C++-like enumerated type
>classes ala LabelValueBean?
>
>Read no further if you understand the question.
>
>In the application I'm working on I have several C++-like enumerated type
>classes.  For example, I have one class called WidthType for which there are
>WIDE, MEDIUM, and NARROW objects.  These are very similar to the
>LabelValueBean class in the struts example.  One major difference though is
>that the objects come from the database.  Each object has a unique id which
>I consider to be the "value."  That is, two enumerator objects are equal if
>they have the same id.
>
>In my screens, I'd like the user to choose from the set of values via
>ComboBox.  I looked at the struts example to see how to do this in struts.
>It looked like the approach was to add a "width" property to my ActionForm
>of type WidthType and use the <html:select> tag.  I tried this and
>encountered two problems.
>
>The first was with the generation of the <option> tags: the current value
>wasn't marked as selected.  I investigated this and discovered that the
>selectTag code records the current value as a String not as a WidthType.
>So, when the optionsTag compares each value against the current value it
>fails because of trying to compare a String against a WidthType.
>
>The second problem was with copying the submitted form data back into my
>ActionForm.  The value of the selected width is actually the object id, but
>it's represented as a String not a WidthType.  So, the writeMethod.invoke()
>call in PropertyUtils.setSimpleProperty() throws an
>IllegalArgumentException.  As I see it, I have to make "width" a WidthType
>because in my actual bean it's a WidthType.  If the two properties differed
>in types, I wouldn't be able to use PropertyUtils.copyProperties() to
>populate my bean.
>
>My question is, am I doing this wrong or is this something that struts
>hasn't addressed yet.  If I'm doing it wrong, what is the intended way?
>
>Thanks,
>Neil
>
>
>
>