Как Grails конвертирует String в Enum? - PullRequest
4 голосов
/ 22 февраля 2012

У меня есть пользовательский toString метод в моем перечислении:

enum TaxRate implements Serializable {
    RATE23(23.0),
    ...

    private String s
    private BigDecimal rate

    private TaxRate(BigDecimal s) {
        this.s = s + "%"
        this.rate = s * 0.01
    }

    public String toString() {
        return s
    }

Теперь, когда я отображаю ставки в HTML, я получаю хороший вывод, такой как TAX: 23,0%.

Но что происходит, когда пользователь выбирает налог из <select> и отправляется значение, т. Е. 23.0% заключается в том, что Grails не может создать / получить экземпляр TaxRate ...

Что я должен переопределить для поддержки этого пользовательского сопоставления? Попытка переопределить valueOf(String) закончилась ошибкой ..

1 Ответ

6 голосов
/ 22 февраля 2012

Вы видели запись в нижней части этой страницы ?

Если вы хотите использовать Enum с атрибутом String "value" (довольно распространенная идиома)в элементе попробуйте это:

enum Rating {
    G("G"),PG("PG"),PG13("PG-13"),R("R"),NC17("NC-17"),NR("Not Rated")

    final String value

    Rating(String value) { this.value = value }

    String toString() { value }
    String getKey() { name() }
}

Затем добавьте optionKey="key" к вашему тегу.

...