1

我使用 IntelliJ 创建了新的 Groffin 模块。系统提示我使用 create-app 命令。创建一个模块很好,正如您所知,默认情况下,当您运行应用程序时,它会显示带有默认内容“内容在此处”的小程序。

接下来,我在 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 类)
  2. LoginController.groovy (groovy 类)
  3. LoginView.groovy (groovy 脚本)

在相应的文件夹中。

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

基本目录:D:\work\griffon\soms 运行脚本 C:\Griffon-1.2.0\scripts\RunApp.groovy 解决依赖关系... 依赖关系在 633 毫秒内解决。环境设置为开发解决框架插件依赖关系...框架插件依赖关系在 1114 毫秒内解决。解决插件依赖关系...插件依赖关系在 741 毫秒内解决。[griffonc] 将 1 个源文件编译到 d:\Users\akarasaev.griffon\1.2.0\projects\soms\classes\main 正在启动应用程序... 2013-04-15 10:26:44,788 [main] INFO 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:没有这样的属性:类的中心:org.codehaus。

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

环境:

  1. 赢 7 专业版,64 位
  2. IntelliJ IDEA 12.1 版
  3. Griffon-1.2.0 JDK 1.6

登录模型.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)
    }
}

登录视图.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})
}

登录控制器.groovy

package soms

class LoginController {
    def model
    def view
}
4

1 回答 1

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}"
    }
}
于 2013-04-15T02:29:54.240 回答