public class Validator extends DataClass
Validators are
specified for DataSource fields via the DataSourceField.validators
property and are executed in the order in
which they are defined
. Validators that need not be run on the server can also be specified for a specific FormItem
or ListGridField
.
Smart
GWT supports a powerful library of ValidatorTypes
which have identical
behavior on both the client and the server.
Beyond this, custom validators can be defined on the client and
custom validation logic added on the server. Note that the regexp
and mask
validator types
are very flexible and can be used to perform virtually any kind of formatting check that doesn't involve some large
external dataset.
Custom validators can be reused on the client by adding them to the global validator list, via the
addValidator()
method.
ValidatorType
factoryCreated, factoryProperties
Constructor and Description |
---|
Validator() |
Validator(com.google.gwt.core.client.JavaScriptObject jsObj) |
Modifier and Type | Method and Description |
---|---|
static void |
addValidatorDefinition(java.lang.String name,
Validator validator)
Register a new standard validator type for reuse, by name.
|
static void |
create()
A Validator shouldn't be created directly.
|
AdvancedCriteria |
getApplyWhen()
Used to create a conditional validator based on
criteria . |
java.lang.Boolean |
getClientOnly()
Indicates this validator runs on the client only.
|
java.lang.String |
getCondition()
For a validator that is not a built-in
ValidatorType , a Callback ,
function, or JavaScript expression to evaluate to see if this validator passes or fails. |
java.lang.String[] |
getDependentFields()
User-defined list of fields on which this validator depends.
|
static Validator |
getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj) |
java.lang.Boolean |
getStopIfFalse()
Normally, all validators defined for a field will be run
in the
order in which they are defined even if one of the validators has already failed. |
java.lang.Boolean |
getStopOnError()
Indicates that if this validator is not passed, the user should not be allowed to exit the field - focus will be forced
back into the field until the error is corrected.
|
ValidatorType |
getType()
Type of the validator.
|
java.lang.String |
getTypeAsString()
Type of the validator.
|
java.lang.Boolean |
getValidateOnChange()
If true, validator will be validated when each item's "change" handler is fired as well as when the entire form is
submitted or validated.
|
Validator |
setApplyWhen(AdvancedCriteria applyWhen)
Used to create a conditional validator based on
criteria . |
Validator |
setClientOnly(java.lang.Boolean clientOnly)
Indicates this validator runs on the client only.
|
Validator |
setCondition(java.lang.String condition)
For a validator that is not a built-in
ValidatorType , a Callback ,
function, or JavaScript expression to evaluate to see if this validator passes or fails. |
Validator |
setDependentFields(java.lang.String[] dependentFields)
User-defined list of fields on which this validator depends.
|
Validator |
setErrorMessage(java.lang.String errorMessage)
Text to display if the value does not pass this validation check.
|
Validator |
setStopIfFalse(java.lang.Boolean stopIfFalse)
Normally, all validators defined for a field will be run
in the
order in which they are defined even if one of the validators has already failed. |
Validator |
setStopOnError(java.lang.Boolean stopOnError)
Indicates that if this validator is not passed, the user should not be allowed to exit the field - focus will be forced
back into the field until the error is corrected.
|
Validator |
setType(java.lang.String type)
Type of the validator.
|
Validator |
setType(ValidatorType type)
Type of the validator.
|
Validator |
setValidateOnChange(java.lang.Boolean validateOnChange)
If true, validator will be validated when each item's "change" handler is fired as well as when the entire form is
submitted or validated.
|
applyFactoryProperties, doAddHandler, fireEvent, getAttribute, getAttributeAsBoolean, getAttributeAsBoolean, getAttributeAsDate, getAttributeAsDouble, getAttributeAsDoubleArray, getAttributeAsFloat, getAttributeAsInt, getAttributeAsIntArray, getAttributeAsJavaScriptObject, getAttributeAsLong, getAttributeAsMap, getAttributeAsObject, getAttributeAsRecord, getAttributeAsString, getAttributeAsStringArray, getAttributes, getHandlerCount, isFactoryCreated, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttributeAsJavaObject, setFactoryCreated
public Validator()
public Validator(com.google.gwt.core.client.JavaScriptObject jsObj)
public static Validator getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj)
public Validator setApplyWhen(AdvancedCriteria applyWhen)
criteria
.
The criteria defines when the validator applies. The form current values or ListGrid record
is used as reference for the criteria. If the criteria match, then the validator will be
processed. Otherwise the validator is skipped and assumed valid.
To use an applyWhen
criteria the form or grid must use a DataSource
.
NOTE: applyWhen
is not supported for "binary" fields.
applyWhen
element is treated as a Criterion
.
<!-- Normal format --> <field name="age" type="integer"> <validators> <validator type="integerRange" min="0" max="100"> <applyWhen operator="or"> <criteria> <criterion fieldName="restrictAge" operator="equals" value="true"/> <criterion fieldName="gender" operator="equals" value="female"/> </criteria> </applyWhen> </validator> </validators> </field> <!-- Conditional requirement --> <field name="reason" type="text"> <validators> <validator type="required"> <applyWhen fieldName="willAttend" operator="equals" value="false"/> </validator> </validators> </field>The last example above shows an alternate to the
requiredIf
validator using a
shorthand format
which is only available for client-side
use. On the client the reason
field will change appearance to match other
required or non-required fields when willAttend
changes. Note that using
applyWhen
for a validator of type required
as in the example may
result in validation request being set to the server where a fetch is made against the
DataSource. For more details, see the discussion at the end of the
DataSourceField.required
help topic.
Component XML
similarly to provide client-only validations or read-only state management. A common
use case is conditionally displaying or enabling fields. Use the readOnly
validator with an applyWhen
value to control the read-only appearance of a
field. The example below shows a field which is hidden when willAttend=true
.
<!-- field definition within a Component XML DynamicForm --> <field name="reason" type="text"> <validators> <validator type="readOnly" fieldAppearance="hidden"> <applyWhen fieldName="willAttend" operator="equals" value="true"/> </validator> </validators> </field>
Conditional validators can be applied to DynamicForm or ListGrid fields in Java code as well.
Note : This is an advanced setting
applyWhen
- New applyWhen value. Default value is nullValidator
instance, for chaining setter callspublic AdvancedCriteria getApplyWhen()
criteria
.
The criteria defines when the validator applies. The form current values or ListGrid record
is used as reference for the criteria. If the criteria match, then the validator will be
processed. Otherwise the validator is skipped and assumed valid.
To use an applyWhen
criteria the form or grid must use a DataSource
.
NOTE: applyWhen
is not supported for "binary" fields.
applyWhen
element is treated as a Criterion
.
<!-- Normal format --> <field name="age" type="integer"> <validators> <validator type="integerRange" min="0" max="100"> <applyWhen operator="or"> <criteria> <criterion fieldName="restrictAge" operator="equals" value="true"/> <criterion fieldName="gender" operator="equals" value="female"/> </criteria> </applyWhen> </validator> </validators> </field> <!-- Conditional requirement --> <field name="reason" type="text"> <validators> <validator type="required"> <applyWhen fieldName="willAttend" operator="equals" value="false"/> </validator> </validators> </field>The last example above shows an alternate to the
requiredIf
validator using a
shorthand format
which is only available for client-side
use. On the client the reason
field will change appearance to match other
required or non-required fields when willAttend
changes. Note that using
applyWhen
for a validator of type required
as in the example may
result in validation request being set to the server where a fetch is made against the
DataSource. For more details, see the discussion at the end of the
DataSourceField.required
help topic.
Component XML
similarly to provide client-only validations or read-only state management. A common
use case is conditionally displaying or enabling fields. Use the readOnly
validator with an applyWhen
value to control the read-only appearance of a
field. The example below shows a field which is hidden when willAttend=true
.
<!-- field definition within a Component XML DynamicForm --> <field name="reason" type="text"> <validators> <validator type="readOnly" fieldAppearance="hidden"> <applyWhen fieldName="willAttend" operator="equals" value="true"/> </validator> </validators> </field>
Conditional validators can be applied to DynamicForm or ListGrid fields in Java code as well.
public Validator setClientOnly(java.lang.Boolean clientOnly)
Normally, if the server is trying to run validators and finds a validator that it can't execute, for safety reasons validation is considered to have failed. Use this flag to explicitly mark a validator that only needs to run on the client.
clientOnly
- New clientOnly value. Default value is falseValidator
instance, for chaining setter callspublic java.lang.Boolean getClientOnly()
Normally, if the server is trying to run validators and finds a validator that it can't execute, for safety reasons validation is considered to have failed. Use this flag to explicitly mark a validator that only needs to run on the client.
public Validator setCondition(java.lang.String condition)
ValidatorType
, a Callback
,
function, or JavaScript expression to evaluate to see if this validator passes or fails.
Because the validator declaration itself is passed as a parameter to
condition()
, you can effectively parameterize the validator. For example, to
create a validator that checks that the value is after a certain date:
{ type:"custom", afterDate:new Date(), condition:"value.getTime() > validator.afterDate.getTime()" }Reusable validators, like the above, can be registered as a standard validatorType by calling
addValidator()
.
Note that, if a field is declared with a builtin FieldType
, the value passed in
will already have been converted to the specified type, if possible.
For the required parameters, see the documentation for ValidatorConditionCallback.
condition
- New condition value. Default value is nullValidator
instance, for chaining setter callsStringMethod
public java.lang.String getCondition()
ValidatorType
, a Callback
,
function, or JavaScript expression to evaluate to see if this validator passes or fails.
Because the validator declaration itself is passed as a parameter to
condition()
, you can effectively parameterize the validator. For example, to
create a validator that checks that the value is after a certain date:
{ type:"custom", afterDate:new Date(), condition:"value.getTime() > validator.afterDate.getTime()" }Reusable validators, like the above, can be registered as a standard validatorType by calling
addValidator()
.
Note that, if a field is declared with a builtin FieldType
, the value passed in
will already have been converted to the specified type, if possible.
For the required parameters, see the documentation for ValidatorConditionCallback.
StringMethod
public Validator setDependentFields(java.lang.String[] dependentFields)
applyWhen
criteria.
Note that for validators run on the server, fields required due to dependentFields
but not present in the
DSRequest.data
of an update because they haven't changed will be
filled in from the server DataSource.
Note : This is an advanced setting
dependentFields
- New dependentFields value. Default value is nullValidator
instance, for chaining setter callssetApplyWhen(com.smartgwt.client.data.AdvancedCriteria)
public java.lang.String[] getDependentFields()
applyWhen
criteria.
Note that for validators run on the server, fields required due to dependentFields
but not present in the
DSRequest.data
of an update because they haven't changed will be
filled in from the server DataSource.
getApplyWhen()
public Validator setErrorMessage(java.lang.String errorMessage)
If unspecified, default error messages exist for all built-in validators, and a generic message will be used for a custom validator that is not passed.
Server-side this string evaluates in a Velocity context where the variables $value and $fieldName are available and refer to the supplied value and the field name, respectively. Note that if the validator is intended to run both on the client and server, you shouldn't use these velocity vars as they will not be expanded on the client and the user may then see raw uninterpolated strings.
errorMessage
- New errorMessage value. Default value is nullValidator
instance, for chaining setter callspublic Validator setStopIfFalse(java.lang.Boolean stopIfFalse)
in the
order in which they are defined
even if one of the validators has already failed. However, if
stopIfFalse
is set, validation will not proceed beyond this validator if the check fails. This is useful to prevent expensive validators from being run unnecessarily, or to allow custom validators that don't need to be robust about handling every conceivable type of value.
stopIfFalse
- New stopIfFalse value. Default value is falseValidator
instance, for chaining setter callspublic java.lang.Boolean getStopIfFalse()
in the
order in which they are defined
even if one of the validators has already failed. However, if
stopIfFalse
is set, validation will not proceed beyond this validator if the check fails. This is useful to prevent expensive validators from being run unnecessarily, or to allow custom validators that don't need to be robust about handling every conceivable type of value.
public Validator setStopOnError(java.lang.Boolean stopOnError)
This property defaults to FormItem.stopOnError
if unset.
Enabling this
property also implies FormItem.validateOnExit
is automatically enabled. If this is a server-based validator, setting this property also implies that FormItem.synchronousValidation
is forced on.
stopOnError
- New stopOnError value. Default value is nullValidator
instance, for chaining setter callspublic java.lang.Boolean getStopOnError()
This property defaults to FormItem.stopOnError
if unset.
Enabling this
property also implies FormItem.validateOnExit
is automatically enabled. If this is a server-based validator, setting this property also implies that FormItem.synchronousValidation
is forced on.
public Validator setType(ValidatorType type)
This can be one of the built-in ValidatorType
, the string
"custom" to define a custom validator, or the string "serverCustom" to define a server-only custom validator.
type
- New type value. Default value is nullValidator
instance, for chaining setter callspublic ValidatorType getType()
This can be one of the built-in ValidatorType
, the string
"custom" to define a custom validator, or the string "serverCustom" to define a server-only custom validator.
public Validator setType(java.lang.String type)
This can be one of the built-in ValidatorType
, the string
"custom" to define a custom validator, or the string "serverCustom" to define a server-only custom validator.
type
- New type value. Default value is nullValidator
instance, for chaining setter callspublic java.lang.String getTypeAsString()
This can be one of the built-in ValidatorType
, the string
"custom" to define a custom validator, or the string "serverCustom" to define a server-only custom validator.
public Validator setValidateOnChange(java.lang.Boolean validateOnChange)
Note that this property can also be set at the form/grid or field level; If true at any level and not explicitly false on the validator, the validator will be fired on change - displaying errors and rejecting the change on validation failure.
validateOnChange
- New validateOnChange value. Default value is nullValidator
instance, for chaining setter callspublic java.lang.Boolean getValidateOnChange()
Note that this property can also be set at the form/grid or field level; If true at any level and not explicitly false on the validator, the validator will be fired on change - displaying errors and rejecting the change on validation failure.
public static void create()
FormItem.validators
or wherever a Validator is needed.public static void addValidatorDefinition(java.lang.String name, Validator validator)
ValidatorType.CUSTOM
.
Any new validator where setType(String)
is set to the registered
name will pick up all properties (error message, condition, etc)
from this validator definition.
name
- name under which validator properties will be availablevalidator
- validator containing standard properties for reuse