использовать Java-класс в качестве команды Grails - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть куча классов 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 ]

2 голосов
/ 08 апреля 2011

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

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

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

0 голосов
/ 15 апреля 2011

На самом деле 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.

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

...