grails - 在 Grails 中正确使用服务(根据 MVCS)

标签 grails model-view-controller

所以我是一个新手 grails 开发人员,想知道如何根据 MVCS 设计模式正确使用服务。现在在我的服务中,我有几个函数来处理我的应用程序逻辑,然后我直接从我的 gsp 引用该服务。我读到评论 here这不是好的形式。所以现在我有
<g:set var="doc" bean="documentPartService"/>直接在我的gsp中。

所以我希望通过正确的 channel 传递信息来改变它,就像评论状态一样。

我遇到的一个小障碍是将信息从我的服务传递到我的 Controller 到我的 gsp。举个例子

<g:form name="inputForm" action="replace">
somecodehere...
<input value="Submit" type="submit">
</g:form>

然后在我的 Controller 中的替换功能中
def replace(){
    render documentPartService.replace(params)
}

然后我在我的服务中有一些逻辑。

我在我看过的一些服务中看到,它们将变量作为 json 返回(documentBody 是我的服务的本地变量)
return documentBody as JSON
但我对如何在我的 Controller / View 中实际访问它感到有些困惑。我不能只是print documentBody在我的 Controller 中,因为它只在我的服务中定义。在我用作引用的插件服务和 Controller 中, Controller 是 1 衬里,就像我一样,它们唯一做的就是 render servicefunction()
任何人都可以阐明我应该如何正确设计这个吗?

最佳答案

当您发布表单时,操作是替换 - Controller 中的替换操作将您的服务输出呈现为输出,而不是返回绑定(bind)到替换 Controller 定义的 gsp。

从理论上讲,它应该像用户发布的那样工作 - 发布将返回将返回 JSON 响应的操作替换。

另一种选择是

def replace(){
    def myValue=documentPartService.replace(params)
    render (view: 'replace', model: [myValue:myValue ])
}

那么你可以有一个名为 replace 的 gsp 页面,其中定义了 ${myValue} ,这将是它的结果。

此外,使用通过 Controller 传递给它的定义值调用您的服务可能是一个更好的主意:
def replace(String val1,String val2,String val3){
  def myValue=documentPartService.replace(val1,val2,val3)
  [myValue:myValue ]
}

更新

考虑到您可能看到了第一个电话,即
render documentPartService.replace(params)

在我的一个插件中调用类似于上述方法。我想如果你看一下邮件列表插件,你会在 Burt 的帮助下注意到。 Controller /服务被锁定为数据类型和确切的期望。

我只能根据经验告诉您,最佳实践是,如果要定义没有理由扩展的函数,则坚持使用后一种方法。例如,在使用渲染服务输出方法的 ajaxdependancyselection 的情况下,这在某些方面有助于保持它更加向后/向前兼容。但实际上考虑一下,也许这些电话可以被锁定。将很快更新插件

关于grails - 在 Grails 中正确使用服务(根据 MVCS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24207812/

相关文章:

grails - Grails 2.4.3中是否禁止将 'applicationContext'作为域名属性名称?

grails - [method] 操作接受类型为 [org...JSONObject] 的参数,该参数未使用 @Validateable 标记。

c# - 使用 AttributeTargets.Class 对自定义 ValidationAttribute 进行客户端验证

model-view-controller - MVC架构的正确实现

javascript - AngularJS Controller 返回表单

grails - IntelliJ IDEA 不会加载在我的磁盘上找到的 Groovy

gradle - 任务 ':bootRun' 执行失败

java - 根据 Spring 的日期和时间限制安排通知和电子邮件

javascript - Json 从服务器到 html 表

grails - 如何使用 GORM 为 Mongo 的低级 API 进行安全插入?