Использовать 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.
Посмотрите на пост в блоге, упомянутый выше, это очень хорошее введение в эту тему.