如何在Grails中创建特定于应用程序的配置

时间:2012-07-05 07:30:13

标签: grails grails-2.0

我有一个用Grails 2.0.4开发的应用程序,我很难编写我的域类中的一些值,例如如下

class Training{
  String startTime ="09:00"
  String endTime  ="17:00"
}

但它不是很好的方法,进行更改是开销,像这样我有超过10个域类,其中值是硬编码的。

所以,我打算创建一个单独的配置Domain类,这样我就可以通过UI(视图)输入值并保留它们。

这是我的计划,是否有任何解决方案可以用来处理它。

更新:

import org.grails.plugins.settings.*

class PublicTraining extends Training{
    Date startDate = Setting.valueFor("startDate")
}

我创建了一个'startDate'设置。我可以在控制器中使用Setting.valueFor(“startDate”)方法访问设置,但不能在域类中访问

我得到的错误在

之下
*Caused by: org.hibernate.InstantiationException: could not instantiate test objectcom.springpeople.tms.PublicTraining
    ... 5 more
*Caused by: java.lang.reflect.InvocationTargetException
    ... 5 more
Caused by: groovy.lang.MissingMethodException: No signature of method: org.grails.plugins.settings.Setting.methodMissing() is applicable for argument types: () values: []
    at org.grails.plugins.settings.Setting.valueFor(Setting.groovy:53)**

1 个答案:

答案 0 :(得分:1)

查看Settings插件。我几乎在每个项目中都使用它。允许您创建任意数量的这些类型的配置设置,并在GSP或控制器/服务/等中访问它们。它甚至提供了一个CRUD gui来管理它们。

//programatically
import org.grails.plugins.settings.*

def startTime = Setting.valueFor("startTime")
def endTime = Setting.valueFor("endTime")

//gsp
<g:setting valueFor="startTime" default="9:00" encodeAs="HTML" />

要在域类中使用它,我总是使用beforeInsertbeforeUpdate个事件。

处理String,Integer,BigDecimal或Date类型的设置。

如果您有多个相似的值(例如“培训开始时间”和“广告资源开始时间”),则需要存储,您也可以将其细分为inventory.startTimetraining.startTime