Thanks Rick, I'd like to clarify something here.
> UserActionForm userForm = (UserActionForm)form; > //userID is set in this form when the user > clicked on the link So, even though the jsp containing the list of users and the links to edit each of them doesnot contain a form tag, your userForm will still be created and assigned a userID? I guess that is the case due to the fact that the UserForm is defined for the DispatchUserAction and has a request scope so the form will always be created when the action is invoked. James --- Rick Reumann <[EMAIL PROTECTED]> wrote: > I posted this in reply to Tony's post, but figured > this stuff comes up > all the time and to those new to Struts, this below > might help.... > > You can accomplish 99% of what you want with this > simple design > > For the sake of this discussion I'm going to assume > you are using a > DispatchAction. In case you don't know, a > DispatchAction just lets you > combine similar types of behaviors into one > Controller... so rather than > have an UpdateUserAction, DeleteUserAction, etc.. > you have one Action... > UserAction with methods in it update(..), > delete(...), etc. > > So typically here's what I do and it covers 'almost' > all of my > scenarios. I find it easier to work with examples > and your "User" is a > good example to work with. Lets say we want to CRUD > (create, retrieve, > update, delete) for a User. > > 1) Step 1 Create a UserActionForm > For simplicity it has just two main > properties... > String userName; > Integer userID; > Also though we are going to provide the dispatch > (or action) as > a property to give it default value of "add" > String dispatch = "add" > This way if we go right to the page it'll have > 'add' by default > > 2) Step 2 Have a BusinessObject back reprsenting > your User. I like to > pass Business objects (not tied to Struts to my > backend), so you'll have > in this case a simple: > > "UserVO" (value object.. could just call it > "User" but for this > discussion seeing VO helps you understand what it > is) > String userName; > Integer userID; > > //NOTE: it helps if the properties of the VO and > the ActionForm have > the same name. Not a requirement but makes things > easier which I'll show > > > 3) Create a "UserDispatchAction" > > This will have the following methods: > (all with signature public ActionForward > methodName (ActionMapping > mapping, ActionForm form, HttpServletRequest > request, > HttpServletResponse response) > > setUpForEdit(..) > setUpForAdd(..) > add(...) > edit(...) > delete(...) > getUsers(...) > > > Before I get to the setUpForEdit() lets just > handle the others... > > In all cases you will be submitting either a > form or a link but in > the struts-config file this will map to our > UserAction where we also > include the name of our UserActionForm, so our > UserActionForm is always > populated. > > So our Add method in our Action... > > //**ADD**** > public ActionForward add(ActionMapping mapping, > ActionForm form, > HttpServletRequest request, HttpServletResponse > response) throws Exception { > > UserActionForm userForm = (UserActionForm)form; > UserVO user = new UserVO(): > //copy our form properties into the VO > PropertyUtils.copyProperties( user, userForm ); > ourBackendDelegate.addUser( user ); > return mapping.findForward("to_form"); > } > > // UPDATE and DELETE... > Same as above except for use of... > > ourBackendDelegate.deleteUser( user ); > ourBackendDelegate.updateUser( user ); > > // THE SET UP FOR EDIT > > Ok, this is the one you were asking about. Now you > have to think about > how you would get here? Typically you'd get to an > edit page by clicking > on a user record to say "Hey, I want to edit this > guy's user > information" So imagine a case where we have a list > of users and > 'userID" for each in the list, they click on the > link and they'll come > to this method which will get our user and then > forward them to a page > to do the editing. The method will look like... > > public ActionForward setUpForEdit(ActionMapping > mapping, ActionForm > form, HttpServletRequest request, > HttpServletResponse response) throws > Exception { > > UserActionForm userForm = (UserActionForm)form; > //userID is set in this form when the user > clicked on the link > //lets get our real business object of this user, > based on ID.. > UserVO user = ourBackendDelegate.addUser( > userForm.getUserID() ); > //copy the other way this time, from UserVO to > our Form... > PropertyUtils.copyProperties( userForm, user ); > //finally we are going to reuse or form for add > and edit, so > //we will set up our dispatch/action parameter > userForm.setDispatch("edit"); > return mapping.findForward("to_form"); > } > > > //The get users - this will display our users on the > page > public ActionForward getUsers(ActionMapping mapping, > ActionForm form, > HttpServletRequest request, HttpServletResponse > response) throws Exception { > //lets say pass in companyID > Integer companyID = Integer.valueOf( > request.getParameter("companyID")); > > //get our list of users to display on page > List users = ourBackendDelegate.getUsers( > companyID ); > request.setAttribute("users", users ); > > return mapping.findForward("to_display"); > } > > 4) sample config... > > > <action path="/userMaintenance" > type="com.foobar.UserAction" > name="userActionForm" > scope="request" > validate="false" > parameter="dispatch"> > <forward name="to_form" > path="/userForm.jsp"/> > <forward name="to_display" > path="/displayUsers.jsp"/> > </action> > > 5) Sample form > > <html:form action="/userMaintenance"> > Name: <html:text property="name"/><br/> > <html:hidden property="userID"/> > <html:hidden property="dispatch"/> > > <html:submit value="${userForm.dispatch}"/> > <!-- above button logic can be done many ways, > just for > simplicity i'm using the dispatch name--> > <html:form> > > 6) Sample page displaying users lets them edit and > delete them > > <c:forEach items='${users}' var='users'> > <c:url var="editUrl" scope="page" > value="/userMaintenance.do"> > <c:param name="dispatch" > value="setUpForEdit"/> > === message truncated === __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]