Grails / Groovy Controller应该返回ExtJS的成功

时间:2013-05-13 06:05:53

标签: grails extjs

我正在尝试这个简单的ExtJS - Grails / Groovy测试。我的Groovy Server Page(gsp)文件包含以下ExtJS代码:

  • 它有两个字段州代码和州名。
  • 用户输入详细信息并单击“提交”。
  • 提交会触发处理程序,该处理程序会将表单进一步POST到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()
    });
  }

下面是带有action / method 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!”消息。

我想将Controller的成功归功于gsp。我该怎么做?请不要介意这个问题是否太天真,因为我是初学者。

3 个答案:

答案 0 :(得分:2)

        render(contentType: "text/json") {
               array = {
                   result "success": 'true',
                          "message": 'State Saved'
               }
        }

答案 1 :(得分:0)

它失败了,因为你的闭包saveState将默认尝试渲染GSP,因为你不渲染或返回任何东西。如果你使用Grails 2.x,声明动作的首选方法是方法,所以我使用的是方法而不是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"
  } 
}

答案 2 :(得分:0)

您没有从“saveState”返回任何内容。尝试返回类似的JSON,

{
     success: 'true',
     message: 'State Saved'
}

您可以在内置的JSON转换器中查找grails以返回更复杂的内容。