2010-12-16 43 views
0

我正在构建一个允许用户上传文档的应用程序。我有基本的创建/视图操作正常工作,但我想在其他地方重复使用此操作。Grails:重用动作

我想知道是否有人有指示如何做到这一点。似乎没有这样做的好方法。

这里有一些方法,我已经考虑:

  1. 尝试做一个链()。这是行不通的,因为链接做了一个GET,并且上传你需要一个POST。
  2. 将主要业务逻辑分解为Grails“服务”,并进行两个使用相同代码的操作。
  3. 使用JS模式窗口。我一直在想一个模式,其中包含一个iframe到文件上传的“unskinned”版本。这里的诀窍是在上传完成后关闭窗口。

感谢

--Matthias

回答

5

我不在乎扩展控制器方法。事实上,我尽可能避免继承。我宁愿将通用代码放入服务类中,然后重复使用它。

+0

我一直在尝试这个......但为了让文件脱离请求流,我需要使API像这样“def Document saveDocument(request,params)”。有趣的是,我试图重复使用这个逻辑的地方是在一个web窗体中,它看起来像“请求”对象是不同的。在常规的CRUD控制器中,它是一个org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest(它有一个“getFile()”方法),而来自webflow的我得到一个org.apache.catalina.core.ApplicationHttpRequest对象。我想我会试图找出一个。 – mlathe 2010-12-16 21:15:32

+0

Akk ...我得到了这个“错误的HTTPServletRequest”问题的工作。我将两个

标签嵌套在一起。所以这个文件并没有被*** enctype =“multipart/form-data”***参数上传 – mlathe 2010-12-16 22:33:22

1

可以使用基本的控制器类,并把通用功能存在。然后扩展基本控制器并从其他操作方法调用该方法。

+0

我的回答并不是说这是一个坏的方法。仅仅提供另一种选择。 – Gregg 2010-12-16 20:45:51

+0

是的...这个解决方案也是有效的。诀窍是今后如何做到这一点。如果有很多这些“共享”操作,那么基类变得笨拙。不过谢谢。 – mlathe 2010-12-16 21:04:49