Grails:如何消除create.gsp和save.gsp并将其移动到list.gsp中列表的第一行?

Grails:如何消除create.gsp和save.gsp并将其移动到list.gsp中列表的第一行?,grails,save,Grails,Save,我想去掉create.gsp和save.gsp,让所有内容都在同一页上。 我所做的是将所有这些字段移动到list.gsp中列表的第一行 但现在我不知道如何将它与其他数据连接起来并使其工作 我得让“创建”按钮工作。但是我不能让更新按钮工作 这是第一行的图片 所有内容都是在第一行中创建的,然后单击“创建”,并使用文本字段中的所有数据创建一个新行。第一行没有ID,但其他所有行都有 我还让擦除按钮工作。所以基本上唯一缺少的就是更新按钮 有什么想法吗 提前谢谢 编辑 以下是控制器中的内容: d

我想去掉create.gsp和save.gsp,让所有内容都在同一页上。 我所做的是将所有这些字段移动到list.gsp中列表的第一行

但现在我不知道如何将它与其他数据连接起来并使其工作

我得让“创建”按钮工作。但是我不能让更新按钮工作

这是第一行的图片

所有内容都是在第一行中创建的,然后单击“创建”,并使用文本字段中的所有数据创建一个新行。第一行没有ID,但其他所有行都有

我还让擦除按钮工作。所以基本上唯一缺少的就是更新按钮

有什么想法吗

提前谢谢

编辑

以下是控制器中的内容:

    def update = {

            def densityInstance = Density.get(params.id)
            if (densityInstance) {
                if (params.version) {
                    def version = params.version.toLong()
                    if (densityInstance.version > version) {

                        densityInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'density.label', default: 'Density')] as Object[], "Another user has updated this Density while you were editing")
                        render(view: "list", model: [densityInstance: densityInstance,'Rcommodity':params?.Rcommodity])
                    }
                }
                densityInstance.properties = params
                if (!densityInstance.hasErrors() && densityInstance.save(flush: true)) {
                    flash.message = "${message(code: 'default.updated.message', args: [message(code: 'density.label', default: 'Density'), densityInstance.id])}"
                    redirect(action: "list", id: densityInstance.id)
                }
                else {
                    redirect(action: "list", id: densityInstance.id)
                }
            }
            else {
                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'density.label', default: 'Density'), params.id])}"
                redirect(action: "list")
            }
        }
由于grails是按列进行的,所以行有点混乱,但这里是:

<g:each in="${densityInstanceList}" status="i" var="densityInstance">
                    <g:form action="update">
                        <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
                            <td>${fieldValue(bean: densityInstance, field: "id")}</td>
                            <td><g:textField name="Rcommodity" value="${densityInstance?.commodity}"  class="input" onKeyPress="return alpha(event)"/>&nbsp;<img src="${resource(dir:'images/skin',file:'information.png')}" ></td>
                            <td><g:textField name="Rorigin" value="${densityInstance?.origin}" maxlength="3" size="5" class="input" onKeyPress="return alpha(event)"/>&nbsp;<img src="${resource(dir:'images/skin',file:'information.png')}" ></td>
                            <td><g:textField name="Rshipper" value="${densityInstance?.shipper}" size="3" class="input" onkeypress="return IsNumeric(event)"/> <g:textField name="RshipperName" value="${densityInstance?.shipperName}" size="15" class="input-b" onfocus="this.blur()"/>&nbsp;<img src="${resource(dir:'images/skin',file:'information.png')}" ></td>
                            <td><g:textField name="Ragent" value="${densityInstance?.agent}" size="3" class="input" onkeypress="return IsNumeric(event)"/> <g:textField name="RagentName" value="${densityInstance?.agentName}" size="15" class="input-b" onfocus="this.blur()"/>&nbsp;<img src="${resource(dir:'images/skin',file:'information.png')}" ></td>
                            <td><g:textField name="Rdest" value="${densityInstance?.dest}" size="5" class="input" onKeyPress="return alpha(event)"/>&nbsp;<img src="${resource(dir:'images/skin',file:'information.png')}" ></td>
                            <td><g:textField name="Rdensity" value="${densityInstance?.density}" size="15" class="input" onkeypress="return IsNumeric(event)"/></td>
                            <td><g:textField name="RAM" value="${densityInstance?.AM}"  size="1" class="input"/></td>
                            <td width="100">
                            <g:form>
                                <g:hiddenField name="id" value="${densityInstance?.id}" />
                                <g:actionSubmit class="editar" action="update" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" />
                                <g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Esta seguro que desea Eliminar?')}');" />
                            </g:form>
                            </td>
                        </tr>
                    </g:form></g:each>

为了摆脱create.gsp和edit.gsp,除了save{}和update{}应该以

redirect(action: list)
为了使更新按钮能够工作,每次更新都应该将其表格的一行提交给更新操作。关于更新{}的所有其他内容都应该保持原样

当然,该行表单应该包含所有对象属性

更新后的代码样本

编辑:哦,我一直误读代码,为什么你需要两个嵌套的g:forms?我会尽量选择一个。只需调试提交给更新操作的内容-参数是否包含对象字段。 我还将消除代码中对重定向操作:list的多余调用。 看起来您在列表操作中没有使用${id}?如果是这样,则不必将其作为列表操作参数传递。 我相信,有一天你会希望通过提交表格行。为此,将每一行封装在一个模板中,将该行提取到单独的模板中,然后提交到另一个操作,例如ajaxUpdate,该操作将执行相同的操作,但以rendertemplate结尾:“lineTemplate”。然后将g:form替换为g:formRemote update=[success:'line${densityInstance.id}],failure:'line${densityInstance.id}],并替换为viola。这也适用于撤消操作。
我认为问题在于您的actionSubmits正在提交包含它们的表单,而您的数据元素位于外部表单中,因此您的更新操作调用没有收到任何要更新的数据。如果您在更新操作的顶部放置一些调试,您可以证明或反驳这个理论。println${params}

OTOH,您打算如何在GUI中撤消对表行的更改?嗯,我在列表中的所有元素中都包含了文本字段,所以我只需要更新按钮。如果要撤消某些操作,必须刷新页面。好的,每一行都有它自己的。但它仍然不起作用。如果我在控制器中创建了几个ifparams呢?.Rcommodity{…}??对不起,我不明白。您能引用表行GSP代码和更新{}代码吗?这是它创建的第一行。如果你想要第一行的代码,在那里所有的东西都被创建,我也可以发布它,但甚至更长。不过,我认为def更新{}中缺少了一些东西,而不是gsp中的实际html代码