Grails:调用使用withForm的动作

时间:2014-07-16 21:39:13

标签: forms grails

我遇到的情况是我需要重用一个包含在withForm闭包中的功能的动作。

提交表单时一切正常,但当我尝试以其他方式重用该操作时,我会从浏览器中获得重定向错误。具体来说,我需要将另一个操作重定向到它,可能用chain调用它,我也想从超链接中调用它。

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

这可能吗?我试图让它做不了的事情吗?

更多信息:

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是我的解决方案。如果有人对解决此问题的其他方法有所了解,请提供帮助。我确定我不是唯一遇到此问题的人。

答案是在很大程度上要归功于@ 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
}

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