code: @Override
  	protected Object doExec(Element element, Object scope, String propertyPath, Object... arguments) throws TemplateException {
  		if (!propertyPath.equals(".") && ConverterRegistry.hasType(scope.getClass())) {
  			throw new TemplateException("Operand is property path but scope is not an object.");
  		}
  		String value = null;
  		Format format = (Format) arguments[0];
  
  		if (format != null) {
  			value = this.content.getString(scope, propertyPath, format);
  		} else {
  			Object object = this.content.getObject(scope, propertyPath);
  			if (object != null) {
  				if (!ConverterRegistry.hasType(object.getClass())) {
  					throw new TemplateException("Invalid element |%s|. Operand for VALUE operator without formatter should be convertible to string.", element);
  				}
  				value = ConverterRegistry.getConverter().asString(object);
  			}
  		}
  
  		if (value == null) {
  			return null;
  		}
  		return new AttrImpl("value", value);
  	}
docs: Execute VALUE operator. Uses property path to extract content value, convert it to string and set element <em>value</em>
  attribute.
  
  @param element context element, unused,
  @param scope scope object,
  @param propertyPath property path,
  @param arguments optional arguments, {@link Format} instance in this case.
  @return always returns null for void.
  @throws TemplateException if requested content value is undefined.