fieldValue
用途
这个标签检查被数据绑定的bean,以获取域的值, 在数据绑定期间,在bean的错误对象中,也可以获取最初提交的值或从bean的属性值.一旦获取到值就自动 HTML 编码.
示例
<g:fieldValue bean="${book}" field="title" />// or as a method
<input type="text" value="${fieldValue(bean:book,field:'title')}" />
描述
属性
bean
(必需) - bean 的实例,用来检查
field
(必需) - 域的名称,用来获取值
Source
Show Source
def fieldValue = { attrs, body ->
def bean = attrs.bean
def field = attrs.field
if(bean && field) {
if(bean.metaClass.hasProperty( bean,'errors')) {
def 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 << ra
else if (mc.hasProperty(ra, 'errors') && ra.errors instanceof 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
}