The default validation, (possibly) generating errors, is done by getErrors(). The default getErrors() implementation uses a number of ways to validate the value of a field. The description is currently not visible in the documentation, but can be found in the source (http://dev.sencha.com/deploy/ext-4.0...Text-getErrors)

In your case you should only have to provide this config or something alike (untested):

Code:

xt.define('Test.TextFieldRemoteVal', {
...,
allowBlank: false,
validator: function(value) {
if (Ext.String.trim(v) == "") {
return true;
} else {
return "This field has to contain more then just whitespace";
}
},
// Since there are more ways the field can become invalid (through allowBlank
// or an regexp) i would listen for the validitychange event and work from there
listeners: {
scope: this,
validitychange: function(field, event) {
if (field.isValid() == false && this.transaction) {
this.transaction.abort();
}
}
}
});