My solution to highlight error fields was to create a custom <html:text> tag which checks if the property associated with the tag has an error in the ActionErrors object - other than the tag I use the standard struts validation - nothing extra required in the Actions. Source code is here:
http://www.niallp.pwp.blueyonder.co.uk/#errortag Niall ----- Original Message ----- From: "Domingo A. Rodriguez S." <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Saturday, May 01, 2004 2:26 AM Subject: Re: Array (or List, or Map) Validation > > my problem.. > > I have a list-backed actionform... > That list can have more than one locationObject javabean... > The locationObject javabean has some fields, including an errorFormat > field.. > That errorFormat field can be set using a mutator method from the javabean > called setErrorFormat("BACKGROUND:#000000;COLOR:#FFFFFF;").. > I am not using the validate method of the actionForm.. > > my solution.. > from inside an Action I do the following.. > > LocationObjectForm lof= (LocationObjectForm)form; > LDHelper ldh= LDHelper(); > LocationObject lob= new LocationObject(); > List locations= lof.getLocations(); > Iterator cnt= locations.iterator(); > boolean isDirty= false; > while(cnt.hasNext()){ > lob= (LocationObject)cnt.next(); > if(!ldh.validateRecord(lob.getCompareField1, lob.getCompareField2)){ > // if the record is not correct, > // then i set the errorformat css style > lob.setErrorFormat("BACKGROUND:#000000;COLOR:#FFFFFF;"); > isDirty= true; > }else{ > // i dont want any error format for good records.. > lob.setErrorFormat(""); > } > > // put the checked list back to the session > req.getSession().setAttribute("locations", locations); > > if(isDirty){ > // forwarded to the same page or tile definition.. > // just to refresh and show the error style where needed.. > return map.findForward("refreshThisDefinition"); > } > // if there is no problem then jump to the next definition or page.. > return map.findForward("nextDefinition"); > } > > then.. in the page where i display the records.. > > <table> > <logic:iterate name=locationform property=locations id=lob indexId=cnt> > <% > List locations= locationform.getLocations(); > LocationObject lob= locations.get( cnt.intValue() ); > String estilo= lob.getErrorFormat(); > %> > <tr> > <td> > <html:text property="<%="locations["+cnt+"].campo1" style='<%=estilo%>'/> > </td> > <td> > <html:text property="<%="locations["+cnt+"].campo2" style='<%=estilo%>'/> > </td> > <td> > <html:text property="<%="locations["+cnt+"].campo3" style='<%=estilo%>'/> > </td> > </tr> > </logic:iterate> > </table> > > Using this I accomplished one of my latest tasks.. :) I highlight the > incorrect records, so the users will see their errors easier. > > Atte. > Domingo A. Rodriguez S. > > --- Niall Pemberton <[EMAIL PROTECTED]> escribió: > To > make this kind of feature useful there needs to be some way of > > indicating > > which occurance of the "indexed" property is in error. So, for example, > > if > > you had a bunch of "order" beans and were validating the order value I > > would > > want to be able to output a message along the lines of... > > > > "Order value for order number 12345 is invalid" > > or > > "Order value on line 5 is invalid" > > > > ... where order number or line number are other properties from the bean > > being validated. Otherwise if you had 20 errors on order value then you > > just > > get 20 indetical messages along the lines of "Order value is invalid" - > > which isn't very useful. > > > > I looked at trying to do this in the current validator but can't see how > > to - have a missed something or am I right and its not possible? > > > > This is an issue for me with the existing functionality where it stops > > on > > the first indexed field in error - we got round it by outputing a > > message > > which doesn't indicate which indexed occurance is in error, but by > > highlighting the field in error, which works reasonably well. > > > > That also would be another type of solution, validate all the indexed > > properties, only show one generic message but highlight all the fields > > in > > error. > > > > I'd be happy if someone would either put me right on this, or say how > > they > > dealt with this scenario. > > > > Niall > > > > > > ----- Original Message ----- > > From: "Robert Leland" <[EMAIL PROTECTED]> > > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > > Sent: Friday, April 30, 2004 1:12 AM > > Subject: Re: Array Validation > > > > > > > > -----Original Message Slightly rearranged ----- > > > > From: Glenn, Scott [mailto:[EMAIL PROTECTED] > > > > > > > > If there are any Struts developers listening can you explain this .. > > is > > it a > > > > bug or by design? > > > > > > Doesn't matter. What matters is that it's not the behavior you need > > right > > ? > > > If someone would like to develop and test a patch that adds an option > > to: > > > A) The <PlugIn > XML element in the struts-config.xml > > > This would change the default behavior to not stop validating on > > an > > > error for a given module. > > > or > > > B) The Validator.xml itself, which would require a change to the > > > validator.dtd, either to: > > > B1) The form definition, so the behavior could be changed on a > > > per form basis. > > > The Option (whenInvalid ? ) would probably have four possible > > > values. [stop, inherit, all]. > > > stop = This is the current default behavior > > > go = This is the behavior you want, where it doesn't > > stop > > > at the first error but attempts to validate all > > data. > > > inherit = This would inherit the behavior from the parent > > form. > > > This assumes using Validator 1.2 which has a > > > validator form inheritance. > > > module = Defers to what the modules default behavior is, > > > assuming that option A) is also implemented. > > > or > > > B2) The validator definition itself so it could be changed on a > > > per type basis. > > > > > > > > > Of these A) Is the simplest and hence the fastest to develop and hence > > test. > > > Because it?s the fastest it?s more likely to be in the > > > 1.2.1 release because. > > > > > > > > > Long term Option B1) probably makes the most sense, but since it > > > requires a change to the commons Validator DTD, it won't make it > > into > > > Struts 1.2.1 since that will be using validator 1.1.3 which will be > > > released this weekend. > > > > > > The patch should include a unit test showing that the default > > behaviour > > > in the same as in Struts 1.1, along with tests for each option. > > > > > > > > > > > > > Thanks, > > > > > > > > Scott. > > > > > > > > > > > > > > > > > > > > FYI: Looks like this is a bug/feature of Struts validation. If you > > have > > a > > > > List of indexed properties, it stops validating them once it has > > discovered > > > > the first error. > > > > > > > > The code below is from the Validator class - it loops around all > > indexed > > > > fields (indexedList), calling the appropriate validate rule > > > > (validateFieldForRule()). However if this validate rule return > > false > > into > > > > the "good" variable, then the method exits without completing the > > loop. > > > > > > > > for (int pos = 0; pos < indexedList.length; pos++) > > > > { > > > > ValidatorResults results = new ValidatorResults(); > > > > StringTokenizer st = new StringTokenizer(field.getDepends(), > > ","); > > > > while (st.hasMoreTokens()) { > > > > String depend = st.nextToken().trim(); > > > > ValidatorAction action = (ValidatorAction) > > actions.get(depend); > > > > if (action == null) { > > > > log.error("No ValidatorAction called " > > > > + depend > > > > + " found for field " > > > > + field.getProperty()); > > > > return; > > > > } > > > > > > > > boolean good = validateFieldForRule(field, action, results, > > actions, > > > > pos); > > > > allResults.merge(results); > > > > if (!good) > > > > { > > > > return; > > > > } > > > > } > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > _________________________________________________________ > Do You Yahoo!? > Información de Estados Unidos y América Latina, en Yahoo! Noticias. > Visítanos en http://noticias.espanol.yahoo.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]