Grails 可以编写响应吗?

Posted

技术标签:

【中文标题】Grails 可以编写响应吗?【英文标题】:Can Grails compose responses? 【发布时间】:2014-02-13 05:58:21 【问题描述】:

LinkedIn 的人们一直在以一种有趣的方式使用 Play 来处理需要由许多不同组件组成的页面:http://engineering.linkedin.com/play/composable-and-streamable-play-apps

他们如何做到这一点的关键部分是 Play 中的“动作”返回完整响应,因此能够通过更高级别的动作“组合”成另一个响应。

Grails 似乎并没有真正从动作中返回任何东西(或者至少没有任何具体的东西),而且当你在一个动作中时也没有一种简单的方法来调用另一个动作。

那么,这种风格的组合响应是否可以通过 Grails 实现?

【问题讨论】:

您可能会使用 Forward 来做类似的事情:grails.org/doc/latest/ref/Controllers/forward.html。不过,我没有在您提供的链接上观看视频。所以,把这个和一粒盐一起吃吧。 @gregg 你应该看视频:) 【参考方案1】:

我看了视频,很棒的东西。

我想不出任何方法来撰写严格遵守 Grails 功能的响应(您说得很好,没有简单的方法可以从另一个操作调用一个操作),但是您可能会获得一些演示文稿中显示的将 Grails 控制器 模板呈现 与 Ajax 调用相结合的好处(是的,这显然只是一种解决方法)。

无论如何,我会设置一个 home.gsp 来定义主布局:

<html>
<head></head>
<body>
    <div><h1>Title</h1></div>
    <div id="section1"></div>
    <div id="section2"></div>
</body>

然后添加一些Ajax:

$(document).ready(function()
    $.ajax(
        type: "POST",
        url: "$g.createLink(controller: 'home', action: 'section1')",
        dataType: "html",
        success: function (data)
            $('#section1').html(data);
        
    );
    $.ajax(
        type: "POST",
        url: "$g.createLink(controller: 'home', action: 'section2')",
        dataType: "html",
        success: function (data)
            $('#section2').html(data);
        
    );
);

HomeController 看起来像这样:

...
def section1() 
    // Some code to fetch cool data...
    render template: 'section1', model: data

def section2() 
    // Some code to fetch cool data...
    render template: 'section2', model: data

...

(我省略了模板 _section1.gsp 和 _section2.gsp。)

只要 ajax 调用返回数据,模板就会在页面中呈现。此外,section 是独立的,这意味着您可以编辑 section1 的内容和布局,而无需担心 section2。

只是为了尝试一下,我做了一个小(而且很丑,没有太多时间)grails 应用程序 (https://github.com/nicosalvato/tochi)。

这就是说,也许您的问题比实际问题更具理论性(“Grails 如何处理函数式编程”之类的问题)。如果我完全没有抓住重点,请随意称我为白痴:)

【讨论】:

我看到这种方法的唯一问题是它把合成的负担放在了浏览器上,这增加了请求的数量。 :( 否则,是的,它确实实现了类似的行为。(是的,我的问题部分是理论上的,因为我很确定 Grails 不能用于 Big Pipe 风格的应用程序。) @cdeszaq 你说的对,这种方法隐含的大量浏览器请求是完全正确的,我没有指出一个缺点。

以上是关于Grails 可以编写响应吗?的主要内容,如果未能解决你的问题,请参考以下文章

学习 Ruby on Rails 对 Grails 有好处吗?

Grails REST 控制器响应不正确的内容类型

grails 控制器可以从基类扩展吗?如何让它不会爆炸?

是否可以在 Grails 中使用 Kotlin?

将 grails 应用程序转换为插件

如何保护 Grails 中的所有 REST 请求和响应