问题标签 [grails3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
170 浏览

grails - 使用带有 beforeInsert / beforeUpdate 的子域类更新父级

您好,我对 Grails 中的 beforeInsert/beforeUpdate 有疑问。我无法让一个简单的父/子用例工作。孩子更新父孙计数器。请参阅下面的模型:

2) 这由 grails 文档记录。在会话刷新时调用 BeforeUpdate,因此在处理更新时添加更新会导致意外行为。文档说要使用 withNewSession 来解决这个问题,但是如果没有在两个不同的会话中注册父实例,我无法弄清楚如何做到这一点。

我的问题是如何实现这一点。我不想使用 HQL 来更新父实体,因为我需要调用 beforeUpdate。

0 投票
1 回答
30 浏览

grails - 选择视图时插件之间的优先级

我有一个相当单一的 Grails 2 应用程序,我正在尝试升级到 Grails 3(特别是 3.2.7)并重构为一组插件 - 当前应用程序使用 Amazon AWS 上的各种服务,我想重构它以便我可以更多轻松切换到 Microsoft Azure 或 OpenStack。

目前,大应用使用了包括 Spring Security UI 在内的各种插件,并且该应用使用自己的插件覆盖了一些 GSP 视图。在重构的场景中,我有一个主应用程序(它将实现 AWS 特定的位),这取决于一个“核心”插件(具有与云无关的功能),而后者又取决于 spring-security-ui。我遇到的问题是,当我将自定义auth.gsp视图放在“核心”插件而不是顶级应用程序中时,它不再覆盖同一视图的 s2ui 版本。如果我将“核心”插件复制auth.gsp到顶级应用程序中的相同位置,它会正确覆盖。

一般来说,如果我有app依赖plugin1依赖plugin2,有没有办法确保当我运行app时, plugin1 提供的视图优先于 plugin2 提供的相同视图

0 投票
1 回答
50 浏览

grails - Grails 3/GORM - 记录更改时的日志条目

我有以下用户类:

我想在名字、中间名或姓氏更改时创建一个新的域对象 UserNameChange:

我知道我可以在事务服务中做到这一点,但如果我能在 User 类中完成同样的事情会更好。我怎样才能原子地做到这一点?例如,“更新前”总是以事务方式完成吗?

0 投票
1 回答
406 浏览

grails - Grails 3:doWithSpring 中的覆盖服务

在 grails 2 中,重写 XPlugin.groovy 中的 bean 只需要在 doWithSpring() 方法中重新定义服务:

我开始在 Grails 3 中编程,已经使用过 Grails 2,并在新插件中尝试了相同类型的覆盖,因为我正在为我现有的一些 Grails 2 插件创建 Grails 3 版本:

我做了一些集成测试:

运行测试时,我收到错误:

我的 TokenStorageProxyService 似乎没有覆盖默认的 JwtTokenStorageService,导致在将服务连接到集成测试时出现 ConversionNotSupportedException。如何覆盖插件中的服务?

0 投票
1 回答
196 浏览

grails - 如何在 GRAILS 3 中生成 EAR 文件?

我想使用 GRAILS 3 生成耳朵文件。我厌倦了使用 Gradle 耳朵插件不起作用?我该怎么做请帮忙。

0 投票
1 回答
102 浏览

grails - How do I create a grails 3 plugin which exposes a JSON view?

In my custom Grails plugin, how can I set up a JSON view for a non-domain class and get client apps to use it by default?

I have a view file in the plugin:

When I do grails install, I can see that this .gson file is in the generated JAR. However, the client app is not using it.

What can I do to make it work?

Are there any settings or steps that can make troubleshooting easier?

I am using Grails 3.2.4.

Update:

When I copy the view into a client app, using the exact same path, the view is getting invoked. It's only when the view is defined in the plugin that the view cannot be found.

The framework seems to be trying to look up the plugin as a class from the classloader: myclientproject_com_mycompany_myplugin_myclass__myClass_gson How do I get my plugin to add this class to the classpath?

0 投票
1 回答
86 浏览

json - 在 JSON 视图中,如何将对象展平为单个字符串?

在我的 grails 3 应用程序(我正在使用 grails 3.2.4)中,对于使用它的任何域对象,我有一个对象类型,我想将其序列化为字符串:

我想创建一个将 CustomId 序列化为字符串而不是对象的视图:

如何在不为使用 CustomId 的每个对象自定义视图的情况下做到这一点?

0 投票
1 回答
1139 浏览

grails - 域类中的 Grails 3.2.8 依赖注入

默认情况下,Grails 3.2.8 似乎没有为域类工作的依赖注入。

当我创建一个新应用程序并使用以下 println 添加 Spring Security Core 3.1.1 时:

我得到:

如果我尝试类似地创建和注入服务,我会得到相同的空值。有没有好的解决方法?

0 投票
1 回答
190 浏览

grails - Grails 2.5.1 应用程序偶尔丢失上下文根

我们有一些应用程序部署到同一个 tomcat 服务器上(目前正在升级到 grails 3,所以这可能是未来几个月的 OBE,但它已经困扰我们很长时间了)并且其中两个应用程序偶尔会失去它们的相对上下文根路径。

假设我们有“app1”和“app2”部署到server:port/app1server:port/app2

app1 工作得很好,但 app2 有时(大约 20% 的时间,可能)会部署,并且所有<g:link/>链接(或任何其他生成的链接,例如资产位置)相对于服务器根目录生成......应用程序正确部署在/app2,因此链接指向错误的位置。

例如,<g:link controller='hello' action='index'/>将生成链接/hello/index而不是/app2/hello/index.

我不知道要发布的相关代码是什么,我们已经将它与我们的其他应用程序进行了比较,并且在表现出这种行为的两个应用程序中没有发现任何明显的不同。但只有这两个(十几个)应用程序会以这种方式中断。

任何关于可能导致此问题或在哪里查看的想法将不胜感激。

编辑:正在使用的插件:

0 投票
2 回答
532 浏览

grails - Grails 3.2.8 无法在控制器中获取 springSecurityService.currentUser

我无法从 Grails 3.2.8 中的控制器获取 springSecurityService.currentUser 。

请注意,Grails 3.2.8 进行了一些性能改进,而之前的版本似乎破坏了 Spring Security Core。根据域类中的 Grails 3.2.8 依赖注入,我设置了 grails.gorm.autowire = true,从而解决了该不兼容问题。

重现步骤:

  1. 使用角色和组使用 Spring Security 3.1.1 创建一个新的 Grails 3.2.8 Web 应用程序。

  2. 在 application.yml 中,设置 grails.gorm.autowire = true

  3. 在引导程序中:

    /li>
  4. 创建一个控制器TestController:

    /li>
  5. 启动服务器并转到 /test。输出是:

    /li>

有没有好的解决方法?