1 /* 2 * $Id: ValidatorForm.java 471754 2006-11-06 14:55:09Z husted $ 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 package org.apache.struts.validator; 22 23 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 import org.apache.commons.validator.Validator; 26 import org.apache.commons.validator.ValidatorException; 27 import org.apache.commons.validator.ValidatorResults; 28 import org.apache.struts.action.ActionErrors; 29 import org.apache.struts.action.ActionForm; 30 import org.apache.struts.action.ActionMapping; 31 32 import javax.servlet.ServletContext; 33 import javax.servlet.http.HttpServletRequest; 34 35 import java.io.Serializable; 36 37 import java.util.Map; 38 39 /** 40 * <p>This class extends <strong>ActionForm</strong> and provides basic field 41 * validation based on an XML file. The key passed into the validator is the 42 * action element's 'name' attribute from the struts-config.xml which should 43 * match the form element's name attribute in the validation.xml.</p> 44 * 45 * <ul> 46 * 47 * <li>See <code>ValidatorPlugin</code> definition in struts-config.xml for 48 * validation rules.</li> 49 * 50 * </ul> 51 * 52 * @version $Rev: 471754 $ $Date: 2005-05-07 12:11:38 -0400 (Sat, 07 May 2005) 53 * $ 54 * @see org.apache.struts.action.ActionForm 55 * @since Struts 1.1 56 */ 57 public class ValidatorForm extends ActionForm implements Serializable { 58 /** 59 * Commons Logging instance. 60 */ 61 private static Log log = LogFactory.getLog(ValidatorForm.class); 62 63 /** 64 * The results returned from the validation performed by the 65 * <code>Validator</code>. 66 */ 67 protected ValidatorResults validatorResults = null; 68 69 /** 70 * Used to indicate the current page of a multi-page form. 71 */ 72 protected int page = 0; 73 74 /** 75 * Gets page. 76 * 77 * @return page number 78 */ 79 public int getPage() { 80 return page; 81 } 82 83 /** 84 * Sets page. 85 * 86 * @param page page number 87 */ 88 public void setPage(int page) { 89 this.page = page; 90 } 91 92 /** 93 * Validate the properties that have been set from this HTTP request, and 94 * return an <code>ActionErrors</code> object that encapsulates any 95 * validation errors that have been found. If no errors are found, return 96 * <code>null</code> or an <code>ActionErrors</code> object with no 97 * recorded error messages. 98 * 99 * @param mapping The mapping used to select this instance 100 * @param request The servlet request we are processing 101 * @return <code>ActionErrors</code> object that encapsulates any 102 * validation errors 103 */ 104 public ActionErrors validate(ActionMapping mapping, 105 HttpServletRequest request) { 106 ServletContext application = getServlet().getServletContext(); 107 ActionErrors errors = new ActionErrors(); 108 109 String validationKey = getValidationKey(mapping, request); 110 111 Validator validator = 112 Resources.initValidator(validationKey, this, application, request, 113 errors, page); 114 115 try { 116 validatorResults = validator.validate(); 117 } catch (ValidatorException e) { 118 log.error(e.getMessage(), e); 119 } 120 121 return errors; 122 } 123 124 /** 125 * Returns the Validation key. 126 * 127 * @param mapping The mapping used to select this instance 128 * @param request The servlet request we are processing 129 * @return validation key - the form element's name in this case 130 */ 131 public String getValidationKey(ActionMapping mapping, 132 HttpServletRequest request) { 133 return mapping.getAttribute(); 134 } 135 136 /** 137 * Reset all properties to their default values. 138 * 139 * @param mapping The mapping used to select this instance 140 * @param request The servlet request we are processing 141 */ 142 public void reset(ActionMapping mapping, HttpServletRequest request) { 143 super.reset(mapping, request); 144 page = 0; 145 validatorResults = null; 146 } 147 148 /** 149 * Get results of the validation performed by the <code>Validator</code>. 150 * 151 * @return results of the validation 152 */ 153 public ValidatorResults getValidatorResults() { 154 return validatorResults; 155 } 156 157 /** 158 * Set results of the validation performed by the <code>Validator</code>. 159 * 160 * @param validatorResults results of validation 161 */ 162 public void setValidatorResults(ValidatorResults validatorResults) { 163 this.validatorResults = validatorResults; 164 } 165 166 /** 167 * Returns a <code>Map</code> of values returned from any validation that 168 * returns a value other than <code>null</code> or <code>Boolean</code> 169 * with the key the full property path of the field. 170 * 171 * @return <code>Map</code> of non-null values 172 */ 173 public Map getResultValueMap() { 174 return ((validatorResults != null) 175 ? validatorResults.getResultValueMap() : null); 176 } 177 }