【问题标题】:Grails/Groovy Controller should return Success to ExtJSGrails/Groovy 控制器应该向 ExtJS 返回 Success
【发布时间】:2013-05-13 06:05:53
【问题描述】:

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

  • 它有两个字段 State Code 和 State Name。
  • 用户输入详细信息并点击提交。
  • Submit 触发处理程序,该处理程序进一步将表单 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()
    });
  }

下面是带有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 代码抛出“状态保存失败!”消息。

我想将 Controller 的成功返回给 gsp。我该怎么做?请不要介意这个问题是否过于幼稚,因为我是初学者。

【问题讨论】:

    标签: grails extjs


    【解决方案1】:
            render(contentType: "text/json") {
                   array = {
                       result "success": 'true',
                              "message": 'State Saved'
                   }
            }
    

    【讨论】:

      【解决方案2】:

      它失败是因为你的闭包 saveState 默认会尝试渲染一个 GSP,因为你没有渲染或返回任何东西。如果您使用的是 Grails 2.x,则声明操作的首选方式是方法,因此我使用的是方法而不是闭包。

      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"
        } 
      }
      

      【讨论】:

      • 谢谢塞尔吉奥。非常抱歉没有回过头来。所以,我尝试渲染文本。但它在哪里呈现文本?假设我在问题中粘贴的 Ext 代码在 createState.gsp 中,“已保存状态”是否会在 createState.gsp 上呈现(覆盖当前内容)?或者它会寻找一个名为 saveState.gsp 的 gsp?还有……成功警报呢?
      • 当我尝试您提供的代码示例时,我没有看到“失败”警报。但我也没有看到成功警报!如果我的问题太天真,再次抱歉:(
      • Ext 仅在您使用“状态已保存”消息时才会执行某些操作。例如,像 JQuery ajax。渲染文本将避免使用 gsp,因此您不必创建 saveState 视图。
      • 如果您没有看到任何警报,请查看您的 javascript 是否失败。您可以在浏览器的错误控制台中查看。
      【解决方案3】:

      你没有从“saveState”返回任何东西。尝试返回 JSON 格式,

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 2023-03-26
        • 1970-01-01
        • 2015-05-05
        • 2015-07-19
        相关资源
        最近更新 更多