Hi Is it possible to "conditionally" trigger a validator such that if conditionA then use ValidatorX else use ValidatorY within the validation framework out of the box?
I have a scenario where a user is entering a serial number as a license key. They can either enter a full serial number which licenses a particular machine, or they can enter a "generic" license number, for example "DEF*" which licenses all machine of a particular model. These keys end up in the same column in the database and there is a single "serial Number field" in the data capture form and hence a single attribute in my action. And of course, they need validating differently. The obvious solution to create two seperate input fields on the .jsp form has been vetoed by the client. I have tried calling two seperate methods and attaching the validators to the individual methods like; public String execute() { if (licenseId.endsWith("*")) { addGenericLicense(licenseId); } else { addSpecificLicense(licenseId); } return SUCCESS; } @CustomValidator(fieldName="licenseId",type="SpecificLicense",message="Invalid License key") private void addSpecificLicense(String licenseId) { getNewUserDTO().addSpecificLicense(licenseId); } @CustomValidator(fieldName="licenseId",type="GenericLicense",message="Invalid Generic License key") private void addGenericLicense(String licenseId) { getNewUserDTO().addGenericLicense(licenseId); } but that doesn't work either - it looks like when either method (addGenericLicense() or addSpecificLicense() is executed, all the validators for the field licenseId are called and both validators fire. I could of course, just write a validate() method in my action, but I would like to keep the validators as I can re-use them elsewhere, so if there's no way to have an "either/or validator" through the framework, I was wondering if there is way of "nesting" the validators. Something along the lines of having one single validator for the license key that programmatically calls the correct validator internally? After looking at the ValidationInterceptor I've had a try at calling a validator programmatically within my action with if (licenseId.endsWith("*")) { GenericLicenseValidator validator = new GenericLicenseValidator(); validator.setValidatorContext(new DelegatingValidatorContext(this)); validator.setFieldName("licenseId"); try { validator.validate(this); } catch (ValidationException e) { e.printStackTrace(); } } but this is giving me null pointer exceptions and I don't know if this is because my code is wrong or because it just insn't going to work. So if anyone could point me to examples of programmatically calling a validator I would appreciate it. Regards -- View this message in context: http://old.nabble.com/Struts-2-Conditional-Validators--tp30471468p30471468.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org