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



我已经使用IntelliJ创建了新的Groffin模块。系统提示我输入create-app命令。创建一个模块很好,正如你所知道的,默认情况下,当你运行一个应用程序时,它会显示一个applet,默认内容是" content goes here"。

接下来,我在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 script)

在相应的文件夹中。

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

基本目录:D:workgriffonsomsC: Griffon-1.2.0 RunApp的脚本。解析依赖…依赖项在633ms内解决。环境开始发展解决框架插件依赖…框架插件在1114 Ms中解决的依赖项。解决插件依赖…插件依赖在741 ms. [griffonc]中解决文件到d:Usersakarasaev.griffon1.2.0projectssomsclassesmain启动应用程序…2013-04-15 10:26:44 . 788 [main] INFOgriffin .swing. swingapplication -初始化所有启动组:[login] 2013-04-15 10:26:46,311 [AWT-EventQueue-0] ERROR发生了一个错误在建房子的时候。LoginView@34a083f2missingpropertyexception:没有这样的属性:CENTER for类:org.codehaus.griffon.runtime.builder.UberBuilder atorg.codehaus.griffon.runtime.builder.UberBuilder.getProperty (UberBuilder.groovy: 187)在org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.getProperty (UberInterceptorMetaClass.groovy: 210)运行(LoginView.groovy:18org.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.美元运行(AbstractMVCGroup.java: 129)2013-04-15 10:26:46,324 [main] ERROR .错误griffonexceptionhandler -未捕获的异常missingpropertyexception:没有这样的属性:CENTER for类:org.codehaus.griffon.runtime.builder.UberBuilder atorg.codehaus.griffon.runtime.builder.UberBuilder.getProperty (UberBuilder.groovy: 187)在org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.getProperty (UberInterceptorMetaClass.groovy: 210)运行(LoginView.groovy:18org.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.美元(AbstractMVCGroup.java: 129)

当我尝试从命令提示符运行时,也会出现相同的错误。

环境:

  1. win7 Pro, 64位
  2. IntelliJ IDEA ver 12.1
  3. griffin -1.2.0 JDK 1.6

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
}

我发现我的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}"
    }
}

最新更新