@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.");
		}
		Object value = content.getObject(scope, propertyPath);
		if (value == null) {
			return null;
		}
		if (Types.isNumber(value)) {
			value = value.toString();
		}
		if (Types.isEnum(value)) {
			value = ((Enum<?>) value).name();
		}
		if (!(value instanceof String)) {
			throw new TemplateException("Invalid element |%s|. ID operand should be string, enumeration or numeric.", element);
		}
		return new AttrImpl("id", (String) value);
	}
@ 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." ) ; } Object value = content . getObject ( scope , propertyPath ) ; if ( value == null ) { return null ; } if ( Types . isNumber ( value ) ) { value = value . toString ( ) ; } if ( Types . isEnum ( value ) ) { value = ( ( Enum < ? > ) value ) . name ( ) ; } if ( ! ( value instanceof String ) ) { throw new TemplateException ( "Invalid element |%s|. ID operand should be string, enumeration or numeric." , element ) ; } return new AttrImpl ( "id" , ( String ) value ) ; }
Execute ID operator. Uses property path to extract content value, convert it to string and set <em>id</em> attribute.

@param element context element, unused,
@param scope scope object,
@param propertyPath property path,
@param arguments optional arguments, unused.
@return always returns null for void.
@throws TemplateException if requested content value is undefined.