Grails GSP:<g:widget ... /> 不会在嵌套数字上抛出 属性
Grails GSP: <g:widget ... /> throws no such property on nested Numbers
我目前正在开发一个 grails 应用程序(版本 3.1.2),我遇到了一个我目前无法解决的令人沮丧的错误。
让我们举个例子:
// Domain classes
class RootBean {
NestedBean nestedBean
}
class NestedBean {
int nestedInteger
}
没什么好说的,就是一对一的关系,没有反向引用
现在让我们详细说明我的问题:我有一个创建视图和一个编辑视图,它们都呈现一个包含所有可能输入的 editTemplate。使用新对象(创建)一切正常但使用现有对象我想更新我收到此 GSP 错误消息:
URI
/VMPMessung/edit/2
Class
groovy.lang.MissingPropertyException
Message
Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/rootBean/edit.gsp:13] Error executing tag <g:render>: [views/rootBean/_editTemplate.gsp:1] Error executing tag <g:form>: [views/rootBean/_editTemplate.gsp:150] Error executing tag <f:widget>: No such property: nestedInteger for class: RootBean
Caused by
No such property: nestedInteger for class: RootBean
普惠制代码:
<f:widget class="form-control"
property="nestedBean.nestedInteger"
bean="RootBean"/>
我还通过 Taglibary 进行了调试,发现它因 Type Integer 而出错,我在真实对象中得到了其他 String 字段,它们工作正常。错误抛出在 FormFieldsTagLib
class 行 569
private CharSequence renderNumericInput(BeanPropertyAccessor propertyAccessor,Map model, Map attrs) {
if (!attrs.type && model.constraints?.inList) {
attrs.from = model.constraints.inList
if (!model.required) attrs.noSelection = ["": ""]
return g.select(attrs)
} else if (model.constraints?.range) {
attrs.type = attrs.type ?: "range"
attrs.min = model.constraints.range.from
attrs.max = model.constraints.range.to
} else {
attrs.type = attrs.type ?: getDefaultNumberType(model )
if (model.constraints?.scale != null) attrs.step = "0.${'0' * (model.constraints.scale - 1)}1"
if (model.constraints?.min != null) attrs.min = model.constraints.min
if (model.constraints?.max != null) attrs.max = model.constraints.max
}
if(propertyAccessor != null && attrs.value) {
attrs.value = g.fieldValue(bean: propertyAccessor.rootBean, field: propertyAccessor.propertyName)
// This call causes the Error
// Debugging Values: propertyAccessor.rootBean: RootBean,
// propertyAccessor.propertyName: nestedInteger
}
return g.field(attrs)
}
我猜他们正试图在 RootBean 而不是 NestedBean 上找到 fieldName 但我是做错了什么还是 Grails 方面的错误?
希望你们中的一些人知道这个问题的答案,这对我来说真的是一个障碍:(
我有同样的问题,奇怪的是我没有问题,我只有
我可以通过变通方法修复它,在 RootBean class 中为 nestedInteger:
实现一个 getter
def int getNumber() {
return nestedBean?.nestedInteger
}
这对我有用。
你能妥善解决吗?
我目前正在开发一个 grails 应用程序(版本 3.1.2),我遇到了一个我目前无法解决的令人沮丧的错误。
让我们举个例子:
// Domain classes
class RootBean {
NestedBean nestedBean
}
class NestedBean {
int nestedInteger
}
没什么好说的,就是一对一的关系,没有反向引用
现在让我们详细说明我的问题:我有一个创建视图和一个编辑视图,它们都呈现一个包含所有可能输入的 editTemplate。使用新对象(创建)一切正常但使用现有对象我想更新我收到此 GSP 错误消息:
URI
/VMPMessung/edit/2
Class
groovy.lang.MissingPropertyException
Message
Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/rootBean/edit.gsp:13] Error executing tag <g:render>: [views/rootBean/_editTemplate.gsp:1] Error executing tag <g:form>: [views/rootBean/_editTemplate.gsp:150] Error executing tag <f:widget>: No such property: nestedInteger for class: RootBean
Caused by
No such property: nestedInteger for class: RootBean
普惠制代码:
<f:widget class="form-control"
property="nestedBean.nestedInteger"
bean="RootBean"/>
我还通过 Taglibary 进行了调试,发现它因 Type Integer 而出错,我在真实对象中得到了其他 String 字段,它们工作正常。错误抛出在 FormFieldsTagLib
class 行 569
private CharSequence renderNumericInput(BeanPropertyAccessor propertyAccessor,Map model, Map attrs) {
if (!attrs.type && model.constraints?.inList) {
attrs.from = model.constraints.inList
if (!model.required) attrs.noSelection = ["": ""]
return g.select(attrs)
} else if (model.constraints?.range) {
attrs.type = attrs.type ?: "range"
attrs.min = model.constraints.range.from
attrs.max = model.constraints.range.to
} else {
attrs.type = attrs.type ?: getDefaultNumberType(model )
if (model.constraints?.scale != null) attrs.step = "0.${'0' * (model.constraints.scale - 1)}1"
if (model.constraints?.min != null) attrs.min = model.constraints.min
if (model.constraints?.max != null) attrs.max = model.constraints.max
}
if(propertyAccessor != null && attrs.value) {
attrs.value = g.fieldValue(bean: propertyAccessor.rootBean, field: propertyAccessor.propertyName)
// This call causes the Error
// Debugging Values: propertyAccessor.rootBean: RootBean,
// propertyAccessor.propertyName: nestedInteger
}
return g.field(attrs)
}
我猜他们正试图在 RootBean 而不是 NestedBean 上找到 fieldName 但我是做错了什么还是 Grails 方面的错误?
希望你们中的一些人知道这个问题的答案,这对我来说真的是一个障碍:(
我有同样的问题,奇怪的是我没有问题,我只有
我可以通过变通方法修复它,在 RootBean class 中为 nestedInteger:
实现一个 getterdef int getNumber() {
return nestedBean?.nestedInteger
}
这对我有用。 你能妥善解决吗?