【问题标题】:jquery+grails, how to pass input data from a dialog into controllerjquery + grails,如何将输入数据从对话框传递到控制器
【发布时间】:2012-11-16 17:33:55
【问题描述】:

我是 grails 和 jquery 的新手。

我已经创建了一个类似这个例子的 jquery 对话框:http://jqueryui.com/dialog/#modal-form

打开一个对话框,输入数据,然后在主页面的表格中显示数据。

表格是动态的,在将所有条目添加到表格后 我想创建一个保存按钮,它将所有数据保存到数据库中, 我的问题是如何将表中的所有数据传递到控制器中,以便控制器可以持久化数据?

这是我的 gsp:

        <fieldset class="form">
            <h2>ReportInstance</h2>
            <table id="reportInstances" class="ui-widget ui-widget-content">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Template</th>
                    </tr>
                </thead>
                <tbody>
                </tbody>
            </table>
            <button id="create_new_reportInstance">Create new Report
                Instance</button>
        </fieldset>

        <fieldset class="buttons">
            <g:submitToRemote controller="NewReport" action="saveReport"
                update="page-body" value="save" />
        </fieldset>
    </g:form>


 javascript:

           $("#dialog-form").dialog(
               {
                autoOpen : false,
                    height : 300,
                    width : 350,
                    modal : true,
                buttons : {
                 "Create an account" : function() {
                          var bValid = true;
                           allFields.removeClass("ui-state-error");
                                if (bValid) {
                                    $("#reportInstances    tbody").append(
                                    "<tr>" + "/<td>" + name.val() + "/</td>"
                                            + "/<td>" + template.val()
                                            + "/</td>" + "/<td>" + "/</tr>");

                            $(this).dialog("close");
                        }
                    },
                    Cancel : function() {
                        $(this).dialog("close");
                    }
                },
                close : function() {
                    allFields.val("").removeClass("ui-state-error");
                }
            });

    $("#create_new_reportInstance").button().click(function() {
        $("#dialog-form").dialog("open");
    });

我只想将 name.val() 和 template.val() 传递给控制器​​

【问题讨论】:

    标签: java javascript html grails groovy


    【解决方案1】:

    我根本不会使用submitToRemote。由于您已经在使用 jQuery,您可以通过 Ajax 发布此内容:

    if(bValid) {
        $.ajax({
            url: "/yourApp/newReport/saveReport",
            type: "POST",
            data: {"name": name.val(), "template": template.val()},
            success: function(data) {
                $("#reportInstances tbody").append( "" + "/" + name.val() + "/" + "/" + template.val() + "/" + "/" + "/");
                $(this).dialog("close");
            },
            error: function(xhr, textStatus, error){
               //whatever you need to do here - output errors etc.
               console.log(xhr.statusText);
               console.log(textStatus);
               console.log(error);
            }
    
        });
    }
    

    在您的控制器中,您将获得一个 params.name 和一个 params.template

    还要注意控制器名称的第一个小写字母 - 在 Grails 中,NewReportController 被访问为 newReport

    【讨论】:

    • 谢谢,您知道如何将表格内容的多个条目一起提交吗?也许就像在一个列表中
    • 嗨凯利,感谢您的回答,我使用 submitToRemote 因为在同一个 g:form 中有其他文本字段,我尝试创建一个页面并将所有客户端输入一起发送,jquery 对话框是一个页面上的组件,你知道如何将 g:textfield 和这个对话框放在一个表单中,并将数据一起发送到控制器吗?
    • 对于您的第一个评论 - 您是否需要从对话框中提交多个新条目?发送不仅仅是您添加的条目的目的是什么?
    • 所以你有一个主表单,然后对话框就像一个只处理“新报告”的子表单 - 对吗?在这种情况下,您可以按照我为对话框子表单显示的那样做:每次提交对话框时,它都会创建一个“新报告”。然后只需在g:form 标签中使用普通表单元素并使用普通提交而不是submitToRemote 如果这不是你想要做的,我不明白拥有对话框表单和标准的意义形式...
    • @Kelly 请你看看这个问题:stackoverflow.com/questions/17269570/…
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多