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
}

这对我有用。 你能妥善解决吗?