Использовать Java-класс в качестве команды Grails

У меня есть куча классов Java, которые я хотел бы использовать в качестве командных классов в моих контроллерах Grails. Типичный пример:

class Person {
    String name
    Integer age

    public String getName() {return name;}
    public String getAge() {return age;}
    public void setName(String name) {this.name = name;}
    public void setAge(Integer age) {this.age = age;}
}

Я хотел бы иметь возможность указать ограничения для этого класса, чтобы я мог вызвать validate() на нем, и любые ошибки проверки будут храниться вerrors имущество. Другими словами, он будет вести себя как обычный командный класс Grails.

Очевидно, что я не могу объявить закрытие ограничений непосредственно в исходном файле.java, потому что Java не поддерживает замыкания. Есть ли способ изменить эти классы (во время выполнения), чтобы добавить поведение команды Grails?

2 ответа

Я не пробовал этого, но вы могли бы использовать возможности метапрограммирования Groovy для достижения этой цели. В вашем Bootstrap.groovy Вы могли бы добавить статический contraints закрытие для всех классов Java, которые вы хотите проверить. Также аннотируйте свои классы с @Validateable, Вот пример:

Person.metaClass.static.constraints = { name blank: false }

После этого обрабатывайте эти классы как классы Command для их проверки.

На самом деле Groovy поддерживает "прикрепление" ограничений к классам домена Java, как описано Питером Ледбруком (SpringSource):

http://blog.springsource.com/2010/08/26/reuse-your-hibernatejpa-domain-model-with-grails/

Как описано в сообщении в блоге, вы, очевидно, не можете определить закрытие ограничений в классе Java. Но вы можете прикрепить метаданные ограничения, создав класс Groovy в соответствии с этим соглашением об именах:

[Package.to.your.dc.MyDomainClass]Constraints.groovy

и поместите это в папку src/java.

Посмотрите на пост в блоге, упомянутый выше, это очень хорошее введение в эту тему.

Другие вопросы по тегам