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
>
>
>
>