我使用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'
}
}
我也创造了:
在相应的文件夹中。
当我运行项目时,它会给出错误:
基本目录: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)
当我尝试从命令提示符运行时发生同样的错误。
环境:
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
}
答案 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}"
}
}