grails - 枚举构造函数仅在枚举类内部允许ara

标签 grails groovy enums

我正在做一个grails项目。现在,我有一个非常令人不安的问题。我有一个名为Status的枚举,如下所示:

enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    private Status(String type) {
        this.type = type
    }

    def String toString() {
        return this.type
    }

    static list() {
        [ENABLED, DISABLED]
    }
}

我还有一个名为TesterController的 Controller ,在该 Controller 上我不断收到错误消息,说“只允许在枚举类内部进行枚举构造函数调用”。问题是:我不从 Controller 类内部调用枚举构造函数!这里是:
class TesterController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index() {
        redirect(action: "list", params: params)
    }

    def list() {
        def minElems = 10

        if(params.max) minElems = params.int('max')

        params.max = Math.min(minElems, 100)

        [testers: Tester.list(params), testerTotal: Tester.count()]
    }

    def create() {
        [tester: new Tester(params)]
    }

    def save() {
        def tester = new Tester(params)
        if (!tester.save(flush: true)) {
            render(view: "create", model: [tester: tester])
            return
        }

        flash.message = message(code: 'ateweb.created.message', args: [tester.name])
        redirect(action: "show", id: tester.id)
    }

    def show() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        [tester: tester]
    }

    def edit() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        [tester: tester]
    }

    def update() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        if (params.version) {
            def version = params.version.toLong()
            if (tester.version > version) {
                tester.errors.rejectValue("version", "ateweb.optimistic.locking.failure",
                      [message(code: 'tester.label', default: 'Tester')] as Object[],
                      "Another user has updated this Tester while you were editing")
                render(view: "edit", model: [tester: tester])
                return
            }
        }

        tester.properties = params

        if (!tester.save(flush: true)) {
            render(view: "edit", model: [tester: tester])
            return
        }

        flash.message = message(code: 'ateweb.updated.message', args: [tester.name])
        redirect(action: "show", id: tester.id)
    }
}

好。所以我迷路了。任何帮助表示赞赏。

最佳答案

Status类的定义存在一些问题,尽管我不知道这些是否是导致问题的原因

enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    // delcaring the constructor private doesn't make much sense because
    // enum constuctors can never be called outside the class
    private Status(String type) {
        this.type = type
    }

    // return type is declared as both def (Object) and String
    def String toString() {
        return this.type
    }

    // this is identical to the automatically-generated values() method
    static list() {
        [ENABLED, DISABLED]
    }
}

将该类重新定义为
enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    Status(String type) {
        this.type = type
    }

    String toString() {
        return this.type
    }
}

并使用values()而不是已删除的list()方法,也许您的问题会消失

关于grails - 枚举构造函数仅在枚举类内部允许ara,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708661/

相关文章:

c# - 在个人类别中表示性别

hibernate - 给定Grails/Hibernate中的条件,查看数据库中是否存在实体的最佳方法

json - Grails:使用executeQuery呈现JSON

hibernate - 无法解决 Grails 2.4.5 中的 HibernateOptimisticLockingFailureException

gradle - Groovy:多次声明字段属性

mysql - 连接到 MySQL 时是否可以在 groovy 中创建数据库?如果是这样,如何?

java - 在 groovy 中发送邮件

grails - 如何在子查询中实现计数

java - 如何通过 Hibernate 将枚举字段设置为 Integer 到 db?

java - 在 Java 枚举定义中使用序号