templates/scaffolding/renderEditor.template 을 살펴보니 아래 cp.url 에서 발생하는것이더군요...(html5 지원을 위한 템플릿 같습니다.)
    private renderStringEditor(domainClass, property) {			def sb = new StringBuilder("")            if ("textarea" == cp.widget || (cp.maxSize > 250 && !cp.password && !cp.inList)) { 				sb << ' cols="40" rows="5"'
				if (cp.maxSize) sb << ' maxlength="' << cp.maxSize << '"'
				if (isRequired()) sb << ' required=""'
 				sb << ' value="${' << "${domainInstance}?.${property.name}" << '}"'				sb << ' from="${' << "${domainInstance}.constraints.${property.name}.inList" << '}"'				if (isRequired()) sb << ' required=""'
				sb << ' value="${' << "${domainInstance}?.${property.name}" << '}"'				sb << ' valueMessagePrefix="' << "${domainClass.propertyName}.${property.name}" << '"'				sb << renderNoSelection(property)
					sb << '<g:field type="password"'
					sb << '<g:field type="url"'
					sb << '<g:field type="email"'
				if (cp.maxSize) sb << ' maxlength="' << cp.maxSize << '"'
				if (!cp.editable) sb << ' readonly="readonly"'
				if (cp.matches) sb << ' pattern="${' << "${domainInstance}.constraints.${property.name}.matches" << '}"'				if (isRequired()) sb << ' required=""'
				sb << ' value="${' << "${domainInstance}?.${property.name}" << '}"'
    public boolean isUrl() {
        if (isNotValidStringType()) {
            throw new MissingPropertyException("URL constraint can only be applied to a String property",
                    URL_CONSTRAINT, owningClass);
        }
        return appliedConstraints.containsKey(URL_CONSTRAINT);
    }