You can on each input field add validation rules. If you specify the type - e.g. here client the validation will be done server side and client side for security reasons. <JetInput id="password"> <validate type="client" name="required"/> </JetInput> possible validation types: required checked (same as required) minlength (one argument required) maxlength (one argument required) match (one argument, the regex is required) int short byte creditcard date email float floatrange (two arguments min and max required) intrange (two arguments min and max required) validatewhen (one argument, the id of the related field required) <JetFieldset id="password"> <validate type="client" name="checked"><arg>1</arg></validate> </JetFieldset> possible validation types: checked (one argument, how many checkboxes or radiobuttons are required) Special validation messages could be set via the "messageKey" attribute.
You can add action based validation if you implement jet.validation.JetValidation interface in your action. here you can write special action based validations or do more complex validations where you need database access etc.
Form based validation could be added as under 4.1 described. form based validation is always done even the action has no validation. Only with the attribute "validate" set to "false" on the action definition you can suspress the form based validation for the action defined. The validation generates error messages and adds them to the message object of the action. If you wan't to react on the errors - like redisplaying the form you have to do this yourself. JET provides no general behave of exceptions or validation errors.