Paul's solution, in this regard, seems more design consistent. On 12/18/05, Dakota Jack <[EMAIL PROTECTED]> wrote: > > I would think that doing validation in your action would be > contra-indicated as a design matter, if you are doing Struts struts rather > than one of the other struts. > > On 12/18/05, Rick R <[EMAIL PROTECTED]> wrote: > > > > On 12/18/05, Josh McDonald <[EMAIL PROTECTED]> wrote: > > > > > > What's the best place to put input validation and possible repair? > > > > > > > > I actually prefer to do the validation checks in my DispatchAction. The > > reason being is that, inevitably, you'll end up with a case where you'll > > have some Lists you'll want to populate on your input JSP that are setup > > > > before you get to the JSP and if validation fails and you use the struts > > built in approach calling validate="true" in your action mapping, you'll > > end > > up with all kinds of problems when you are brought back to the JSP after > > > > validation fails (request scoped lists won't be in scope). Unless you > > use > > some other plans to keep the lists around (Session, reset,etc... all of > > which I don't like much and I talk more about here: > > http://www.reumann.net/struts/articles/request_lists.jsp)<http://www.reumann.net/struts/articles/request_lists.jsp%29>. > > I find it saves > > you from headaches down the line if you just do your validation calls > > from > > your Action class. You can still use the validation framework (commons > > validator stuff that Paul mentions) to set up validation checks if > > that's > > your pleasure... it's just that the call to invoke those checks ends up > > being initiated from the Action. As an example: > > > > //notice the prep method which will put stuff back in request scope when > > > > validation fails and would also be used by other dispatch methods in > > this > > action class > > > > public ActionForward yourActionMethod(ActionMapping mapping, ActionForm > > form, HttpServletRequest request, HttpServletResponse response) throws > > Exception { > > YourForm yourForm = (YourForm)form; > > if (validationSuccessful(request, yourForm)) { > > //do stuff. > > return mapping.findForward(Constants.SUCCESS); > > } else { > > prep(request); > > return mapping.findForward(Constants.FAILURE); > > } > > } > > > > private void prep(HttpServletRequest request) { > > request.setAttribute(Constants.SOME_LIST_NAME, > > service.getSomeKindOfList()); > > } > > > > private boolean validationSuccessful(HttpServletRequest request, > > EmployeeForm form) { > > boolean isOk = true; > > ActionMessages errors = new ActionMessages(); > > //do your validation checks... > > //ie... > > if (form.getFirstName() == null || form.getFirstName > > ().trim().length() > > == 0) { > > errors.add("firstName", new ActionMessage("errors.required", > > "First > > Name")); > > } > > //or you could even call the form's validate... > > //errors = form.validate( mapping, request ); > > > > //continue with other checks > > > > if (!errors.isEmpty()) { > > saveErrors(request, errors); > > isOk = false; > > } > > return isOk; > > } > > > > -- > > Rick > > > > > > > -- > "You can lead a horse to water but you cannot make it float on its back." > ~Dakota Jack~ >
-- "You can lead a horse to water but you cannot make it float on its back." ~Dakota Jack~