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);
}