All,

If anyone read my last (and first) posting to the list they'll know that
I'm new to Struts. Anyway, after deciding to plan on using Struts in my
next project, I felt that for the application many Beans would be required
for the many, many, many, forms. All of which will need extensive
validation. So I decided that ideally one shouldn't need to define a Bean
for each form, only define the data on the form to be picked up by the
ActionServlet, validated and then passed to the custom Action class.
Anyway, I thought that it would be a lot of work to implement and also read
the current plans for version 1.1 (of Struts) and came up with a half-way
house, for us in the interim.

However, at the w/e I got bored and ended up writing my initial design and
it is already just about useable. It's not complete and I'm sure there's
lots of missing pieces and bugs. I intend to carry on with it this week as
much as I can, but thought I'd just pass on more about it. Once it is more
useable I'll willingly pass on the code to others, but it can't be easily
back-engineered into newer releases of Struts, and I don't really want to
spark any code-forking. But at the least it may spark some ideas for the
Struts developers. My implementation of course is very rough and there are
much better ways to do it, and I'm in no doubt that the team (knowing the
framework inside-out) could do it much better. (I also have other ideas
that would be cool too)

Anyway, he's how it is used:
(I've directly re-coded existing classes where necessary, and also made a
new package. All original Struts functionality remains - I hope!.)

1. in the struts-config.xml file you have a definition for your forms, e.g.

  <action-mappings>
    <action path="/order"
            type="com.bar.fu.OrderAction"
         name="orderForm"
         input="/order.jsp" >
      <forward name="success" path="/confirmOrder.jsp" />
    </action>
  </action-mappings>
<data-mappings>
    <data-mapping name="orderForm">
      <property-mapping viewName="customerID" modelName="customerID" type
="int" required="true" />
      <property-mapping viewName="productID" modelName="productID" type
="int" required="true" />
      <property-mapping viewName="price" modelName="price" type="float"
required="true" regExpr="" />
    </data-mapping>
</data-mappings>

An additional property-mapping attribute is 'defaultValue'.

2. If validation is specified in web.xml then each data value is validated
according to the data-type to be converted to and any regular expressions
given (haven't implemented the regExp bit yet). Failure naturally takes the
user back to the 'input' page (in the action-mappings).

3. All that happens then is that the ActionForm given in Action.process()
is a subclass called org.apache.struts.data.DataForm which is a 'glorified
Hashtable' of the values defined in the data-mapping for that form.

4. There will also be populate and extract methods on the DataForm class to
automatically 'move' values to and from the DataForm and a Bean (or EJB)
given.


Using this extension to Struts will greatly speed the development of our
next project, but it would be good if something like it could be
incorporated into the original code-stream.


Anyway, if people are interested in it then let me know and once I've put
some more work into it I'll be happy to pass it on.


Regards,



Sean

--------------------------------------------------
Dr Sean Radford, MBBS, MSc
Senior Consultant
Agora Professional Services Ltd
[EMAIL PROTECTED]
http://www.agora.co.uk

Reply via email to