我正在尝试这个简单的ExtJS - Grails/Groovy测试。我的Groovy Server Page (gsp)文件包含以下ExtJS代码:
- 有两个字段:州代码和州名。
- 用户输入详细信息,点击提交。
- Submit触发处理程序,该处理程序进一步将表单发送给Controller类。
function createTender() {
var submitHandler = function() {
alert("Submit Pressed !");
var formPanel = Ext.getCmp('stateForm');
formPanel.getForm().submit({
url : 'state/saveState',
method : 'POST',
success : function() {
alert('State saved successfully!');
},
failure : function() {
alert('State save failed!');
}
});
}
Ext.create('Ext.form.Panel',{
id: 'stateForm',
height: 300,
width: 400,
bodyPadding: 10,
title: 'Create State',
items: [{
xtype:'textfield',
fieldLabel: 'State Code',
name: 'stateCode',
allowBlank:false
}, {
xtype:'textfield',
fieldLabel: 'State Name',
name: 'stateName'
}],
buttons: [{
text: 'Save',
handler: submitHandler
},{
text: 'Cancel'
}],
renderTo: Ext.getBody()
});
}
下面是具有saveState操作/方法的StateController类。它只输出状态代码,不做任何事情。
class StateController {
static scaffold = true
def saveState = {
println "Into saveTender() method !!!"
println params.stateCode
// Steps to save the state code and name into Database.
}
}
问题:
- saveState方法打印两个println语句。但是,正如你所看到的,我没有返回任何东西,因为我不知道我应该返回什么给gsp。我的目的只是保存状态详细信息,并抛出一个警告,说"状态已成功保存!"的消息。
- 但是,gsp中的Ext代码抛出了"State save Failed!"消息。
我想从控制器返回成功到gsp。我该怎么做呢?如果这个问题太幼稚,请不要介意,因为我是初学者。
render(contentType: "text/json") {
array = {
result "success": 'true',
"message": 'State Saved'
}
}
它失败是因为您的闭包saveState
将尝试在默认情况下呈现GSP,因为您不呈现或返回任何内容。如果您使用的是Grails 2。声明动作的首选方式是方法,所以我使用方法而不是Closure。
def saveState() {
State state = new State(stateCode: params.stateCode, stateName: params.stateName)
if(state.save()) {
render text: "State saved."
} else {
render text: "State fails: $state.errors"
}
}
您没有从"saveState"返回任何内容。尝试返回一个JSON,如
{
success: 'true',
message: 'State Saved'
}
您可以查找grails内置的JSON转换器来返回更复杂的东西