给 Controller 注入一些公共的属性与方法
| Type | Name and description |
|---|---|
AttachmentService |
attachmentService属性:附件服务 |
OsmEmployeeService |
osmEmployeeService属性:员工服务 |
OsmOrganizationService |
osmOrganizationService属性:组织机构服务 |
SecUserService |
secUserService属性:用户服务 |
SettingService |
settingService属性:系统参数服务 |
| Type | Name and description |
|---|---|
void |
deleteFailedAttachments()当 bean 保存失败时,删除已保存的附件 |
java.io.InputStream |
findTemplateFile(String root, String name, Map options = null)搜索模板文件 |
Employee |
getEmployee()属性:当前员工 |
Long |
getEmployeeId()属性:当前员工ID |
User |
getUser()属性:当前用户 |
Long |
getUserId()属性:当前用户ID |
String |
getUsername()属性:当前用户登录名 |
Map |
paginateParams(Integer defaultMax)处理 params 中的翻页参数,以免异常 |
Map |
paginateParams() |
void |
renderExport(Map modelAndView)渲染文档导出 |
boolean |
saveReferences(org.grails.datastore.gorm.GormEntity bean)保存/更新提交的关联对象(xxx.xxx)的数据 |
List<Attachment> |
updateAttachments(org.grails.datastore.gorm.GormEntity bean)保存请求中的附件,并返回附件对象列表 |
org.grails.datastore.gorm.GormEntity |
withInstance(Closure callback)简化控制器里的操作代码,将最常用的判断放到本方法中。 |
org.grails.datastore.gorm.GormEntity |
withInstance(Class domainClass, Closure callback, String c1, String c2) |
| Methods inherited from class | Name |
|---|---|
trait InterceptorTrait |
renderDenied, renderDenied, renderDenied, renderError, renderError, renderMessage, renderText, renderWarning, renderWarning |
属性:附件服务
属性:员工服务
属性:组织机构服务
属性:用户服务
属性:系统参数服务
当 bean 保存失败时,删除已保存的附件
搜索模板文件
由于模板文件可能在 jar 包中,此时无法获得文件对象,因此统一返回一个输入流对象。
root - 模板文件夹下的根文件夹,常见的如 import-export、attachment、avatar、signature 等name - 模板文件名,如 export.docxoptions.path - 基于 root 的文件夹路径,默认通过 scaffold 自动计算属性:当前员工
属性:当前员工ID
属性:当前用户
属性:当前用户ID
属性:当前用户登录名
处理 params 中的翻页参数,以免异常
按照插件的依赖顺序,会自动覆盖 bropen.toolkit.traits.ControllerTrait 中的同名方法。
渲染文档导出
如果存在模板文件定义,且找到了模板文件,则通过自定义的渲染器进行数据填充后导出;否则通过视图和数据模型导出。
通过视图导出时,可以通过设置 params._export_format 设置导出格式,通过 params._export_filenmae 设置导出文件名; 其中,默认格式为doc,即默认会重定向到 export.doc.gsp;如果对应的gsp文件不存在,则会出404错误。
modelAndView.view - 视图文件定义;会根据导出格式,自动加上扩展名,如 export.doc(对应到export.doc.gsp文件)。modelAndView.model - 数据模型定义modelAndView.model.template - 模板文件定义,包括 findTemplateFile 方法中的 root、name、options 等属性,以及渲染器闭包 renderer。modelAndView.model.template.renderer - 渲染器闭包,可以接收模板文件的输入流作为参数;
渲染器中对模板进行数据填充处理、并返回一个包含 name、file 的 Map。目前仅支持返回 [name: "xx.docx", file: XWPFDocument 对象]。保存/更新提交的关联对象(xxx.xxx)的数据
如:Domain类 A 关联Domain类 B,且没有任何belong的关系,表单A上包含 B.name,提交时如果 B 实例还不存在,保存时可能会导致异常:
“object references an unsaved transient instance - save the transient instance before flushing B”
一般在控制器的save、update操作的 bean.save 前调用。
controller - 控制器bean - Domain实体Bean保存请求中的附件,并返回附件对象列表
如果 bean.id 为空,会尝试 bean.save(flush: true);如果 bean.hasErrors() 会返回空列表。
简化控制器里的操作代码,将最常用的判断放到本方法中。
注:控制器必须继承自 bropen.framework.controller.ScaffoldController 及其子类。
通过控制器模板,在 show、edit、save、update、delete 等操作中调用。
callback - 如果需要启用事务支持,则应为有两个参数的回调闭包,第一个参数为根据 params.id 拿到的 bean 对象,第2个参数为 withTransaction 后的 TransactionStatus status 参数。 save、update、delete 操作必须启用事务,因此此时回调闭包必须为两个参数,如果参数数量不正确,会抛出 No signature of method 的异常。 简单的说,如果是 save、update、delete 操作,或者是别的希望启用事务支持的操作,则传个带两个参数的回调闭包进来;否则传一个参数的回调闭包。