在Grails中,作为命令对象或命令对象属性处理抽象域类的预期方式是什么?
Grails支持将域类作为命令对象的现成属性。我可以将域类在Grails中,作为命令对象或命令对象属性处理抽象域类的预期方式是什么?,grails,data-binding,gorm,command-objects,Grails,Data Binding,Gorm,Command Objects,Grails支持将域类作为命令对象的现成属性。我可以将域类Stuff与命令StuffCommand一起使用,但如果Stuff是抽象类,则不能使用 Stuff.groovy abstract class Stuff{ } class StuffCommand{ Stuff stuff } class ExampleController{ def doStuffWithStuff(StuffCommand stuffCmd){ render stuffCmd.st
Stuff
与命令StuffCommand
一起使用,但如果Stuff
是抽象类,则不能使用
Stuff.groovy
abstract class Stuff{
}
class StuffCommand{
Stuff stuff
}
class ExampleController{
def doStuffWithStuff(StuffCommand stuffCmd){
render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
}
}
StuffCommand.groovy
abstract class Stuff{
}
class StuffCommand{
Stuff stuff
}
class ExampleController{
def doStuffWithStuff(StuffCommand stuffCmd){
render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
}
}
示例控制器.groovy
abstract class Stuff{
}
class StuffCommand{
Stuff stuff
}
class ExampleController{
def doStuffWithStuff(StuffCommand stuffCmd){
render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
}
}
然后,请求http://server:port/ctx/example/doStuffWithStuff?stuff=123
不会从我的数据库中从stuff
表中获取记录#123。我喜欢这种方法的简洁性。对数据库的查询要么不进行,要么以静默方式失败
不过,以下变通方法有点帮助:
为抽象comain类创建一个转换ValueConverter
的类。类名必须以ValueConverter
结尾,而不能随意命名,例如IdStringToStuffValueConverter
IdStringToStuffValueConverter
import org.grails.databinding.converters.ValueConverter
class IdStringToStuffValueConverter implements ValueConverter{
@Override
boolean canConvert(Object value) {
value instanceof String || value instanceof Integer || value instanceof Long
}
@Override
Object convert(Object value) {
return Stuff.get(value.toLong())
}
@Override
Class<?> getTargetType() {
return Stuff
}
}
在此操作期间,不会发生任何数据库查询,因此解决方法不包括此情况。如何使用抽象域类作为命令对象?您应该重新处理您的问题,以显示非工作位,否则可能没有足够的信息来获得正确的答案。完成后,现在可能更清楚了。我还编辑了问题名称。