【问题标题】:grails update td in a formgrails 以表格形式更新 td
【发布时间】:2026-02-09 10:55:02
【问题描述】:

我有一个按钮可以更新 fieldset 或 td 等标签以显示渲染的模板:

   <td id="tdBtn"><g:submitToRemote name="showFieldSet" value="Edit" update="fieldSet" action="setPwdTxtVisible" onComplete="hideBtn(3)" /></td>

 <fieldset id="fieldSet">
<-- this will be the section where the template will be rendered upon btn click name="showFieldSet" -->

    </fieldset>

动作:

def setPwdTxtVisible=
    {
        def employeeId= params.employeeId
        MySession session = MySession.getMySession(request, params.employeeId)
        session.profileInstance.isEditPwd = true
        render(template:"/layouts/passwordProfile")

    }

有没有办法在 def 方法中而不是在按钮中进行更新?问题是当保存数据时验证失败时,页面被重新加载并且更新的 td 再次返回到没有呈现的模板。我想更新 catch 中的 td (在 SAVE 方法中的 try catch 语句中),以便模板仍然存在。喜欢这样编码:以及如何在不使用 javascript 的情况下访问第一个位置的 td?这可能吗?

 def setPwdTxtVisible=
    {
        def employeeId= params.employeeId
        MySession session = MySession.getMySession(request, params.employeeId)
        session.profileInstance.isEditPwd = true
        render(template:"/layouts/passwordProfile")
        update fieldset //<<------

    }

【问题讨论】:

    标签: forms grails action html-table


    【解决方案1】:

    如果没有 javascript,您将无法做到这一点。控制器无权访问 DOM。

    修改你的控制器动作,使其返回失败或成功消息,然后你可以在更新方法中使用映射 - update="[success: 'message', failure: 'error']"

    如果你这样做,它基本上是说如果你的 AJAX 调用失败,它会在名为 error 的 div 上呈现客户端的错误。

    您还可以通过 http 状态消息控制错误消息的流向,因此在您的 submitToRemote 方法中,您可以添加一个 on501="error" ,它使用您的 501 的内容更新错误 div 或使用特定的服务器操作.

    http://grails.org/doc/latest/ref/Tags/submitToRemote.html

    你的控制器不应该操纵 DOM 元素。

    【讨论】: