# 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
                        for (String fieldPart in field.split("\\.")) {
                            rejectedValue = rejectedValue?."$fieldPart"
                        }
                    }
                    if (rejectedValue != null) {
                        out << formatValue(rejectedValue, field)
                    }
                }
                else {
                    def rejectedValue = bean
                    for (String fieldPart in field.split("\\.")) {
                        rejectedValue = rejectedValue?."$fieldPart"
                    }
                    if (rejectedValue != null) {
                        out << formatValue(rejectedValue, field)
                    }
                }
            }
        }    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 {
                for (attributeName in request.attributeNames) {
                    def ra = request[attributeName]
                    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
                    }
                }
            }        resultErrorsList
        }