在Application.groovy问题中更改启动MVC组

时间:2013-04-15 01:31:46

标签: groovy intellij-idea griffon

我使用IntelliJ创建了新的Groffin模块。我被提示输入create-app命令。 创建模块很好,如您所知,默认情况下,当您运行应用程序时,它会显示包含默认内容“内容在此处”的applet。

接下来,我在Application.groovy中添加了第二个登录 MVC组:

application {
    title = 'Soms'
    startupGroups = ['login']

    // Should Griffon exit when no Griffon created frames are showing?
    autoShutdown = true

    // If you want some non-standard application class, apply it here
    //frameClass = 'javax.swing.JFrame'
}
mvcGroups {
    // MVC Group for "soms"
    'soms' {
        model      = 'soms.SomsModel'
        view       = 'soms.SomsView'
        controller = 'soms.SomsController'
    }

    // MVC Group for "login"
    'login' {
        model       = 'soms.LoginModel'
        view        = 'soms.LoginView'
        controller  = 'soms.LoginController'
    }

}

我也创造了:

  1. LoginModel.groovy(groovy class)
  2. LoginController.groovy(groovy class)
  3. LoginView.groovy(groovy script)
  4. 在相应的文件夹中。

    当我运行项目时,它会给出错误:

      

    基本目录:D:\ work \ griffon \ soms运行脚本   C:\ Griffon-1.2.0 \ scripts \ RunApp.groovy解决依赖关系......   依赖性在633ms内得到解决。环境设定为发展   解决框架插件依赖... Framework插件   依赖关系在1114毫秒内解决。解决插件依赖...   插件依赖关系在741毫秒内解决。 [griffonc]编译1个来源   文件到d:\ Users \ akarasaev.griffon \ 1.2.0 \ projects \ soms \ classes \ main   启动申请... 2013-04-15 10:26:44,788 [主要]信息   griffon.swing.SwingApplication - 初始化所有启动组:   [登录] 2013-04-15 10:26:46,311 [AWT-EventQueue-0]错误   org.codehaus.griffon.runtime.builder.UberBuilder - 发生错误   同时构建soms.LoginView@34a083f2   groovy.lang.MissingPropertyException:没有这样的属性:CENTER for   class:org.codehaus.griffon.runtime.builder.UberBuilder at   org.codehaus.griffon.runtime.builder.UberBuilder.getProperty(UberBuilder.groovy:187)     在   org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.getProperty(UberInterceptorMetaClass.groovy:210)     在soms.LoginView.run(LoginView.groovy:18)at   org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:152)     在   org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:160)     在   org.codehaus.griffon.runtime.core.AbstractMVCGroup $ 1.run(AbstractMVCGroup.java:129)   2013-04-15 10:26:46,324 [主要]错误   griffon.util.GriffonExceptionHandler - 未捕获的异常   groovy.lang.MissingPropertyException:没有这样的属性:CENTER for   class:org.codehaus.griffon.runtime.builder.UberBuilder at   org.codehaus.griffon.runtime.builder.UberBuilder.getProperty(UberBuilder.groovy:187)     在   org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.getProperty(UberInterceptorMetaClass.groovy:210)     在soms.LoginView.run(LoginView.groovy:18)at   org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:152)     在   org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:160)     在   org.codehaus.griffon.runtime.core.AbstractMVCGroup $ 1.run(AbstractMVCGroup.java:129)

    当我尝试从命令提示符运行时发生同样的错误。

    环境:

    1. Win 7 Pro,64位
    2. IntelliJ IDEA ver 12.1
    3. Griffon-1.2.0 JDK 1.6
    4. LoginModel.groovy

      package soms
      
      import groovy.beans.Bindable
      import griffon.transform.PropertyListener
      import static griffon.util.GriffonNameUtils.isBlank
      
      @Bindable
      @PropertyListener(enabler)
      class LoginModel {
          String login
          String password
          boolean submitEnabled
          boolean resetEnabled
      
          private enabler = { e ->
              submitEnabled = !isBlank(login) && !isBlank(password)
              resetEnabled =  !isBlank(login) || !isBlank(password)
          }
      }
      

      LoginView.groovy

      package soms
      
      application(title: 'Login',
              preferredSize: [320, 240],
              pack: true,
              locationByPlatform: true
      )
      
      borderLayout()
      panel(constraints: CENTER, border: emptyBorder(6)) {
          gridLayout(rows:3, columns:2, hgap:6, vgap:6)
      
          label: 'login:'
          textField columns: 20, text: bind(target: model, 'login', mutual: true)
      
          label: 'password:'
          textField columns: 20, text: bind(target: model, 'password', mutual: true)
      }
      
      panel(constraints: SOUTH){
          gridLayout(rows:1, cols:2, hgap:6, vgap:6 )
          button('reset', actionPerformed: controller.reset, enabled: bind{model.resetEnabled})
          button('submit', actionPerformed: controller.reset, enabled: bind{model.submitEnabled})
      }
      

      LoginController.groovy

      package soms
      
      class LoginController {
          def model
          def view
      }
      

1 个答案:

答案 0 :(得分:1)

我发现我的LoginController.groovy不完整。 现在它的工作和正确的LoginController.groovy如下:

package soms

import griffon.transform.Threading

class LoginController {
    def model
    def view

    @Threading(Threading.Policy.SKIP)
    def reset = {
        model.login = ''
        model.password = ''
    }
    def submit = {
        println "Login: ${model.login}"
        println "Password: ${model.password}"
    }
}