An approach I've used successfully, which is looks like where you are going, is to
(1) create a set of standard Actions that can act up a known type of object, or an object that implements a particular interface, and (2) pass the type of the bean to create to the standard Action as the parameter property. <action path="/item/Edit" type="org.apache.gavel.http.SecureHelper" <-- standard section name="itemForm" scope="request" validate="false" parameter="org.apache.gavel.item.Select"> <-- business bean <forward name="continue" path="/pages/item/Form.jsp"/> </action> The standard Action can then instantiate the bean and use the interface methods to act upon it. This is akin to the approach Struts uses for ActionForms, et cetera. The "ModelBeans" in the Scaffold/Artimus packages in the Contrib folder demonstrate using this in practice. I now find myself writing signficant applications that use virtually no custom Actions at all, and instead end up putting all the business logic in business beans (where they belong). This is exactly the same idea that Craig proposed in his Workflow proposal (thanks Craig!). When I get a break, I hope to revisit the workflow proposal and see if I can get my apps to do the same thing I'm doing with these standard actions (see Scaffold) with workflow objects. -- Ted Husted, Husted dot Com, Fairport NY USA. -- Java Web Development with Struts. -- Tel +1 585 737-3463. -- Web http://www.husted.com/struts/ rob wrote: > > This is a pretty lengthy post so if you're not that interested be warned not > to continue. > > I'm trying to develop a struts application that has the ability to have new > beans plugged > into it after it's been deployed. > > The idea is someone will come along later and write a new set of component > class files > (that also use struts) and can simply modify the struts-config.xml and plug > them in. > > I've developed two sets of actions, the first is a set of generic actions > that will rely on > methods that will exist by convention in any component that is developed for > the > application. The second set of actions are specific to whatever component > is being > plugged in and are specified per action. > > Below I have illustrated an example struts-config.xml that has two familiar > components > plugged into it. A 'Folder' and 'Document' which is a fairly familiar idea > to most. Each > component may implement 4 core operations view, creation, modification and > removal. > > I was just wondering if anyone could offer some comments that might be > helpful in > developing the model I am trying to build. Or by all means any other design > advice is > good as well. > > Thanks > > rob > <form-beans> > <form-bean name="viewFolder" type="CreateFolderForm"/> > <form-bean name="viewDocument" type="CreateDocumentForm"/> > <form-bean name="createFolder" type="CreateFolderForm"/> > <form-bean name="createDocument" type="CreateDocumentForm"/> > <form-bean name="modifyFolder" type="CreateFolderForm"/> > <form-bean name="modifyDocument" type="CreateDocumentForm"/> > <form-bean name="removeFolder" type="CreateFolderForm"/> > <form-bean name="removeDocument" type="CreateDocumentForm"/> > </form-beans> > > <global-forwards> > <forward name="view" type="do/view"/> > <forward name="create" type="do/create"/> > <forward name="modify" type="do/modify"/> > <forward name="remove" type="do/remove"/> > </global-forwards> > > <!-- begin element independant actions --> > <action path="/view" > type="ViewAction" > name="viewForm" > scope="request"> > > <forward name="view/Folder" > path="do/viewFolder"/> > <forward name="view/Document" > path="do/viewDocument"/> > > </action> > > <action path="/create" > type="CreateAction" > name="createForm" > scope="request"> > > <forward name="create/Folder" > path="/WEB-INF/pages/createFolder.jsp"/> > <forward name="create/Document" > path="/WEB-INF/pages/createDocument.jsp"/> > > </action> > > <action path="/modify" > type="ModifyAction" > name="modifyForm" > scope="request"> > > <forward name="modify/Folder" > path="/WEB-INF/pages/modifyFolder.jsp"/> > <forward name="modify/Document" > path="/WEB-INF/pages/modifyDocument.jsp"/> > > </action> > > <action path="/remove" > type="RemoveAction" > name="removeForm" > scope="request"> > > <forward name="remove/Folder" > path="/WEB-INF/pages/removeFolder.jsp"/> > <forward name="remove/Document" > path="/WEB-INF/pages/removeDocument.jsp"/> > > </action> > > <!-- begin element dependant actions --> > > <action path="/viewFolder" > type="ViewFolderAction" > name="viewFolderForm" > scope="request"> > > <forward name="view.Folder" > path="/WEB-INF/pages/viewFolder.jsp"/> > > </action> > > <action path="/viewDocument" > type="ViewDocumentAction" > name="viewDocumentForm" > scope="request"> > > <forward name="view.Document" > path="/WEB-INF/pages/viewDocument.jsp"/> > > </action> > > <action path="/createFolder" > type="CreateFolderAction" > name="createFolderForm" > input="/WEB-INF/pages/createFolder.jsp" > scope="request"> > > </action> > > <action path="/createDocument" > type="CreateDocumentAction" > name="createDocumentForm" > input="/WEB-INF/pages/createDocument.jsp" > scope="request"> > </action> > > <action path="/modifyFolder" > type="ModifyFolderAction" > name="modifyFolderForm" > input="/WEB-INF/pages/modifyFolder.jsp" > scope="request"> > </action> > > <action path="/modifyDocument" > type="ModifyDocumentAction" > name="modifyDocumentForm" > input="/WEB-INF/pages/modifyDocument.jsp" > scope="request"> > </action> > > <action path="/removeFolder" > type="RemoveFolderAction" > name="removeFolderForm" > input="/WEB-INF/pages/removeFolder.jsp" > scope="request"> > </action> > > <action path="/removeDocument" > type="RemoveDocumentAction" > name="removeDocumentForm" > input="/WEB-INF/pages/removeDocument.jsp" > scope="request"> > </action> > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>