【发布时间】:2016-04-12 09:20:49
【问题描述】:
我正在使用 Grails 2.4.3,我正在尝试创建一个动态的抽象域类控制器,其中包含一些标准方法,每个域类都可以使用这些方法。
所以我创建了DomainClassController
abstract class DomainClassController {
def domainClassSearchService
def domainClass = Foo
ApplicationContext context = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT) as ApplicationContext
ConfigObject config = context.getBean(GrailsApplication).config
def index() {
if (!domainClass)
return render(text: 'fehler', status: INTERNAL_SERVER_ERROR)
def list = domainClassSearchService.list(params, domainClass, params.max, params.offset, params.sort, params.order)
Integer count = domainClassSearchService.count(params, domainClass)
render view: 'index', model: [list: list, count: count]
}
def search() {
if (!domainClass)
return render(text: 'fehler', status: INTERNAL_SERVER_ERROR)
def list = domainClassSearchService.list(params, domainClass, params.max, params.offset, params.sort, params.order)
Integer count = domainClassSearchService.count(params, domainClass)
render template: 'list', model: [list: list, count: count, params: params]
}
}
现在我想要一个扩展 DomainClasscontroller 的 BarController:
class BarController extends DomainClassController {
def domainClass = Bar
}
如何在每个 Controller 中设置 domainClass 以便抽象控制器可以将其用于索引和搜索方法?
编辑
我按照答案中的描述进行操作以使其正常工作。 但现在我想让 create Method 动态化,所以我添加了这个:
def create(){
def domainClassObject = getDomainClass()?.newInstance()
domainClassObject.properties = params
return render(view: getViewPath() + 'create', model: [domainClass: domainClassObject])
}
这项工作本身也可以,但我不想在 GSP 中使用属性domainClass。我想在 Lower Cas 中使用类名,所以 f.e. foo 用于视图中的 Foo 类和 bar 用于视图中的 Bar 类。
如何将模型名称设置为小写的 ClassName?
【问题讨论】:
-
可以使用抽象方法代替属性。
-
与您的问题无关,但不是
ApplicationContext context = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT) as ApplicationContext和ConfigObject config = context.getBean(GrailsApplication).config,您可以通过实现GrailsConfigurationAware并在setConfiguration方法中初始化config属性来简化它。您的示例甚至没有使用config,因此尚不清楚您为什么需要其中任何一个。
标签: grails