Matt -- Did you have trouble getting your validation entries to pass the dtd rules? I'm using "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" and getting the error The content of element type "field-validator" must match "(param*,message)".
mraible wrote: > > I figured out how to do this - posting here so others will benefit. > > 1. Create a new ConditionalVisitorFieldValidator.java: > > public class ConditionalVisitorFieldValidator extends > VisitorFieldValidator > { > private String expression; > > public void setExpression(String expression) > { > this.expression = expression; > } > > public String getExpression() > { > return expression; > } > > /** > * If expression evaluates to true, invoke visitor validation. > * @param object the object being validated > * @throws ValidationException > */ > public void validate(Object object) throws ValidationException > { > if (validateExpression(object)) > { > super.validate(object); > } > } > > /** > * Validate the expression contained in the "expression" paramter. > * @param object the object you're validating > * @return true if expression evaluates to true (implying a validation > failure) > * @throws ValidationException if anything goes wrong > */ > public boolean validateExpression(Object object) throws > ValidationException > { > Boolean answer = Boolean.FALSE; > Object obj = null; > > try > { > obj = getFieldValue(expression, object); > } > catch (ValidationException e) > { > throw e; > } > catch (Exception e) > { > // let this pass, but it will be logged right below > } > > if ((obj != null) && (obj instanceof Boolean)) > { > answer = (Boolean) obj; > } > else > { > log.warn("Got result of " + obj + " when trying to get Boolean."); > } > > return answer; > } > } > > 2. Add it to your validators.xml: > > <validator name="conditionalvisitor" > class="com...validation.ConditionalVisitorFieldValidator"/> > > 3. Write your validation rule: > > <field name="colleaguePosition"> > <field-validator type="fieldexpression" short-circuit="true"> > reason == 'colleague' and colleaguePositionID == '_CHOOSE_' > <message>You must choose a position where you worked with this > person, or choose "Other..."</message> > </field-validator> > <field-validator type="conditionalvisitor"> > reason == 'colleague' and colleaguePositionID == 'OTHER' > <message/> > </field-validator> > </field> > > Hope this helps, > > Matt > > > mraible wrote: >> >> I need to do something similar - is it possible to have conditional >> visitor validation in Struts 2? AFAICT, it isn't. >> >> Basically, I'd like to have a couple of validation rules for a drop-down. >> One rule is that the user must select at least one choice when the >> drop-down has its radio button selected: >> >> <field-validator type="fieldexpression" short-circuit="true"> >> reason != 'partner' or (reason == 'partner' and partnerPositionID >> != '_CHOOSE_') >> <message>You must choose a position where you worked with this >> person, or choose "Other..."</message> >> </field-validator> >> >> This works. Now I want to require a number of fields if the person >> selects the "Other..." option. The validation syntax starts to get >> complicated at this point. I'd like to do something like: >> >> reason != 'partner' or (reason == 'partner' and partnerPositionID != >> 'OTHER') -> kick in visitor validation. >> >> I still think the above syntax is confusing (ref >> http://tinyurl.com/2htw2k), I'd much rather write something like: >> >> reason == 'partner' and partnerPositionID == 'OTHER' -> show message >> >> I'm guessing it's possible to write my own FieldExpressionValidator that >> inverses the true/false outcome? >> >> Why do I need conditional visitor validation? >> >> I'm trying to create a "component" that can be re-used in the backend >> (model object w/ its own validation rules) and on the front-end (using >> JSP tag files or the s:component tag). >> >> If there's an easier way to do this, please let me know. Of course, I >> could use JSF/Wicket/Tapestry - and that might be the outcome if this is >> not possible. >> >> Thanks, >> >> Matt >> >> >> Sparecreative wrote: >>> >>> Is there a way to setup conditional validation through the >>> validation.xml >>> file? >>> >>> I'm currently user the visitor validator method where my core user >>> validation properties are in a User-validation.xml file. I want to be >>> able >>> to use this same file for all my user actions (register, add, update) >>> and >>> just have conditional code which looks a user field to determine >>> validation. >>> >>> At the moment I'm using a combination of the valididation.xml file and >>> the >>> validate method in the action. >>> >>> I know the following doesn't work, but can I have something like this: >>> >>> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator >>> 1.0.2//EN" >>> "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> >>> <validators> >>> >>> <validator type="expression"> >>> >>> user.action.equals('insert') || user.action.equals('register') >>> <!-- only validate these fileds when inserting and registering a user >>> --> >>> <field name="user.password"> >>> <field-validator type="requiredstring"> >>> <message key="user.password.empty"/> >>> </field-validator> >>> </field> >>> <field name="user.confirmPassword"> >>> <field-validator type="requiredstring"> >>> <message key="user.confirmPassword.empty"/> >>> </field-validator> >>> </field> >>> </validator> >>> <!-- core validated fields --> >>> <field name="user.name"> >>> <field-validator type="requiredstring"> >>> <message key="user.name.empty"> >>> resource not found</message> >>> </field-validator> >>> </field> >>> <field name="user.email"> >>> <field-validator type="requiredstring" >>> short-circuit="true"> >>> <message key="user.email.empty"/> >>> </field-validator> >>> <field-validator type="email"> >>> <message key="user.email.invalid"/> >>> </field-validator> >>> </field> >>> <field name="user.phone"> >>> <field-validator type="stringlength"> >>> 10 >>> <message key="user.phone.length"/> >>> </field-validator> >>> </field> >>> <field name="user.city"> >>> <field-validator type="requiredstring"> >>> <message key="user.city.empty"/> >>> </field-validator> >>> </field> >>> >>> >>> >>> Z. >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >> >> > > -- View this message in context: http://www.nabble.com/Conditional-validation-tf3678771.html#a12216265 Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]