Grails:调用一个使用withForm的操作



我有一种情况,我需要重用一个将其功能包装在withForm闭包中的操作。

提交表单时一切正常,但当我试图以另一种方式重用该操作时,我从浏览器获得重定向错误。具体来说,我需要将另一个操作重定向到它,可能使用chain调用它,并且我还希望从超链接调用它。

我真的想避免创建冗余的动作或让invalidToken闭包执行相同的代码。我试图找到一些关于withForm如何工作的更多细节,并找出如果没有令牌传递给闭包会发生什么,但谷歌让我失望。

这可能吗?我是不是想让它做它做不到的事?

更多信息:

我有一个用户编辑控制器动作。它是用withForm闭包包装的。在三种不同的情况下,我需要调用这个控制器来呈现用户编辑页面:

  1. 管理员在输入中输入用户的id并单击表单提交按钮(此表单使用useToken)。这需要保护并防止重复表单提交。
  2. 管理员通过单击从员工列表中选择要编辑的用户在用户名(超链接)上。我可以用useToken把它变成一个表单提交,并做一些CSS样式使它看起来像一个链接。
  3. 管理员创建一个新用户。用户创建成功创建控制器将重定向(或使用链)到编辑控制器。我找不到解决这个问题的方法,除了创建一个冗余的控制器。

如果您的代码在多个地方使用,控制器动作不是放置它的最佳位置。我建议您将这段代码移到一个服务中,并从两个操作中调用它。

这是我的解决方案。如果有人对解决这个问题的其他方法有一些见解,请贡献。我敢肯定我不是唯一一个有这个问题的人。

这个答案很大程度上要归功于@Sergio的回应。这比我想象的要简单得多。我创建了没有withForm的编辑操作,然后从另一个操作调用它,该操作将编辑操作包装在withForm中。

def editWT(Long uid, Long pid){
    withForm{
        edit(uid, pid)
    }
}
def edit(Long uid, Long pid){
    // Do lots of stuff to prep the data for rendering the view
}

这个答案不是创新或突破性的,但它有效。我希望这能帮助到其他人。

最新更新