Map params = new HashMap();
params.put(RhinoExpressionEngine.PARAM_LEVEL, RhinoExpressionEngine.LEVEL_SCRIPTLETS);
message = engine.resolveScriptlets(message, validationContext, params);
}
ExpressionResult result = engine.evaluateExpression(expression, validationContext, ExpressionEngine.TYPE_EXPRESSION, buildValidationExpressionParams(fieldReg));
if (result.isError() || result.isFalse()) {
fieldIsValid = false;
String errorMsg = message;
// Validation had an error itself, we put out the error cause instead of the validation message
if (result.isError()) {
errorMsg = "Validation-Expression could not be processed. Warning: " + result.getException().getMessage() + " - expression was: " + expression;
if (result.getException() != null) {
// See if there is a TMLFormValidationException "somewhere down there". If so we take it as negative validation result
Throwable cause = result.getException();
while (!(cause instanceof TMLFormValidationException) && cause.getCause() != null && cause.getCause() != cause) {
cause = cause.getCause();
}
if (cause instanceof TMLFormValidationException) {
errorMsg = cause.getMessage();
}
else {
formContext.addwarning(errorMsg, false);
formContext.getlog().error("Error running validation expression", result.getException());
}
}
}
if (WGUtils.isEmpty(errorMsg)) {
formContext.addwarning("No message defined for validation '" + expression + "'", false);
}
log.debug(errorMsg);
_messages.put(fieldname, errorMsg);
// clear field if type is hashedpassword
// to ensure the validation can be executed again
if (fieldReg.getType().equals("hashedpassword")) {
field.clear();
}
// clear given dependent fields
clearFields(fieldReg.getCleariferror());
break; // stop further validation of this field
}
else if (result.isTrue()) {
log.debug("Validation result for field '" + fieldReg.getName() + "' result of '" + expression + "' is '" + result.isTrue() + "'.");
}
}
}
// In WGA5 behaviour we automatically check for conversion errors and treat them like validation errors