fieldValue
Purpose
This tag will inspect a bean which has been the subject of data binding and obtain the value of the field either from the originally submitted value contained within the bean's errors object populating during data binding or from the value of a bean's property. Once the value is obtained it will be automatically HTML encoded.
Examples
<g:fieldValue bean="${book}" field="title" />// or as a method
<input type="text" value="${fieldValue(bean:book,field:'title')}" />
Description
Attributes
bean
(required) - The bean instance to inspect
field
(required) - The name of the field to obtain the value of
Source
Show Source
def fieldValue = { attrs, body ->
def bean = attrs.bean
def field = attrs.field?.toString()
if(bean && field) {
if(bean.metaClass.hasProperty( bean,'errors')) {
Errors errors = bean.errors
def rejectedValue = errors?.getFieldError(field)?.rejectedValue
if(rejectedValue == null ) {
rejectedValue = bean
field.split("\\.").each{ String fieldPart ->
rejectedValue = rejectedValue?."$fieldPart"
}
}
if(rejectedValue != null) {
out << formatValue(rejectedValue)
}
}
else {
def rejectedValue = bean
field.split("\\.").each{ String fieldPart ->
rejectedValue = rejectedValue?."$fieldPart"
}
if(rejectedValue != null) {
out << formatValue(rejectedValue)
}
}
}
} def extractErrors(attrs) {
def model = attrs['model']
def checkList = []
if (attrs?.containsKey('bean')) {
if(attrs.bean)
checkList << attrs.bean
} else if (attrs.containsKey('model')) {
if(model)
checkList = model.findAll {it.value?.errors instanceof Errors}.collect {it.value}
} else {
request.attributeNames.each {
def ra = request[it]
if(ra) {
def mc = GroovySystem.metaClassRegistry.getMetaClass(ra.getClass())
if (ra instanceof Errors && !checkList.contains(ra))
checkList << ra
else if (mc.hasProperty(ra, 'errors') && ra.errors instanceof Errors && !checkList.contains(ra.errors)) {
checkList << ra.errors
}
}
}
} def resultErrorsList = [] for (i in checkList) {
def errors = null
if (i instanceof Errors) {
errors = i
} else {
def mc = GroovySystem.metaClassRegistry.getMetaClass(i.getClass())
if (mc.hasProperty(i, 'errors')) {
errors = i.errors
}
}
if (errors?.hasErrors()) {
// if the 'field' attribute is not provided then we should output a body,
// otherwise we should check for field-specific errors
if (!attrs['field'] || errors.hasFieldErrors(attrs['field'])) {
resultErrorsList << errors
}
}
} return resultErrorsList
}