问题标签 [grails-3.3]

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 投票
1 回答
119 浏览

grails - grails generate-controller creating strange interface service

I'm migrating a 2.5.6 app to 3.3.10. When generating controllers, detected that a service was created and used from the controllers auto-generated code. Looking at the service, is just an interface.

Looking at the grails generate-controller documentation, I can't find information about that "interface service"

http://docs.grails.org/3.3.10/ref/Command%20Line/create-controller.html

What that service is doing internally is also a mistery, and it's not clear what/where should I touch the code when I need to customize any of those methods in the service. I guess this is a new thing in Grails 3.3.x but not sure where to find more info.

So the concrete questions are:

  1. What is the purpose of that interface service?
  2. Where is that documented?
  3. How to customize? Like being implemented by a custom service?

Sample service:

0 投票
1 回答
131 浏览

grails - Grails 3.3.x 处理文件上传最大大小超出异常

我正在阅读有关文件上传的本教程:https ://guides.grails.org/grails-upload-file/guide/index.html

但是即使文件大小限制设置为 25MB,也没有描述当上传的文件超过这个值时如何处理 FileUploadBase$SizeLimitExceededException 异常。如果有限制,即使它太大,有人会碰到它并想向用户显示一个很好的错误,但异常似乎发生在执行我的控制器代码之前。

问题是:如何在 Grails 3.3.x 应用程序上处理这种异常?

0 投票
1 回答
89 浏览

grails - 域方法中设置的 Grails 3.3.10 值未保存

我有一个带有 resetPasswordToken 属性的 User 类,这是当用户尝试重置密码时设置的 UUID。

在 Grails 2.5.6 上,我有这样的东西可以正常工作:

现在我将它迁移到 GRails 3.3.10,并且在调用 forgotPassword 操作后,数据库上的 resetPasswordToken 为 NULL。如果在调用 user.setPasswordToken() 后执行 println,我可以看到 resetPasswordToken 设置为 UUID,但不在数据库中。还检查了保存时的错误,并且没有错误。

奇怪的是,如果我在控制器中执行user.resetPasswordToken = "xxxx",则该值会正确保存到数据库中。

不确定 setPasswordToken() 中设置的值没有保存到数据库中发生了什么。任何指针?

0 投票
1 回答
245 浏览

grails - Grails 域属性可以为空 - 默认情况下为真?

关于将域类属性设置为可为空,如下所述:https ://docs.grails.org/3.3.10/ref/Constraints/nullable.html

有没有办法让“可空等于真”成为我所有 Grails 域类中所有属性的默认值?与 nullable 的默认值为 false 不同。

作为附加说明,我的 grails.databinding.convertEmptyStringsToNull = false 文件中也有该属性application.yml

我在 Grails 3.3.10 上。

0 投票
2 回答
224 浏览

servlets - 如何在 Grails 中将真实路径作为字符串获取

使用 grails-3.3.1 开发项目并生成 Runnable WAR 文件。当我使用命令运行时:

它正在返回null以下行:

但是当部署在 Tomcat 容器中时它工作正常。

然后尝试了以下方法:

它正在返回,但不是预期的,也不是getRealPath()返回的。它是这样返回的:

这对我没有用。找到建议使用getResourceAsStream()但我不想要资源的答案,我只想要String.

0 投票
0 回答
108 浏览

validation - 如何使自定义约束在 Grails 3.3.10 中工作?

我们正在从 Grails 2.5.4 迁移到 Grails 3.3.10。在众多障碍中,一个是我们的注册自定义约束不再起作用。经过一些研究,我们发现在 Grails 3.3.10 中有一种新的方式来声明和注册这些约束。

即使遵循了这些步骤,这些约束似乎也被忽略了。我在这里错过了什么吗?

自定义约束类:

我在 Bootstrap.groovy 的 init 块中注册了这个约束,如下所示:

我可以看到这个约束已经添加到Registry中,如下:

我在一个可验证的类中使用了这个约束,如下所示:

0 投票
2 回答
141 浏览

hibernate - 如何使用休眠 Envers 触发实体 onLoad()?

我正在将 Hibernate Envers 添加到我的 Grails 3 项目中。我注意到对于我的一个实体,它有一个onLoad()事件,该onLoad()事件永远不会为 Envers 修订实体调用。

如何确保始终调用此代码,即使对于此实体的历史修订也是如此?

用例:

我正在使用 Grails 3 JSON 视图开发 RESTful 服务。我的一个域类有一个鉴别器列,它也必须在 JSON 输出中呈现,以便消费者知道它是什么类型。出于这个原因,域实体定义了一个onLoad()方法来填充与鉴别器类型匹配的瞬态属性:

这适用于普通域实例,但是当我从 Envers' 查找实体修订时AuditQueryCreator,审计查询没有调用该onLoad()方法。

似乎我可以遍历结果并手动调用onLoad(),但我希望有更好的方法来解决这个问题。

提前致谢!

0 投票
1 回答
96 浏览

hibernate - 如何在 Grails 3 中将属性传递给 Enver?

我在我的 Grails 应用程序中使用 Hibernate Envers,并尝试设置该org.hibernate.envers.audit_strategy属性。配置它的正确方法是什么?

我尝试将以下内容添加到application.yml

我对此尝试了几种变体,还尝试将其设置为application.groovy,但我无法让 Envers 阅读它。

我宁愿将它包含在项目源中,而不是在命令行中设置它。

更新:

另一个不起作用的配置(application.yml):

更新 2:

我在调试器中注意到配置中有一个嵌套映射,如下面的屏幕截图所示。这会阻止AuditEntitiesConfiguration正确读取属性,因为它只是使用map.get.

为什么会这样?我的 YAML 格式有问题吗?

在此处输入图像描述

我尝试将此属性的 YAML 设置简化为一行,但没有帮助:

0 投票
2 回答
248 浏览

grails - 如何在 grails 3.3.9 中为禁止的 url 访问显示自定义错误页面

我的 grails3.3.9应用程序有不同的模块,它们ROLE使用 spring security 实现了不同的基于访问。

AdminController 通过访问ROLE_ADMIN。如果非管理员用户登录并尝试访问,Admin URL则 grails 显示

[Image]Grails 错误消息:Sorry, you're not authorized to view this page.

我想显示我的自定义消息。

[Image: ]自定义消息:403 Access Forbidden

应用程序.groovy

URL映射

我分别为403.

500 & 404工作正常。

0 投票
0 回答
58 浏览

grails - grails 3.3.10 设置 server.connection-timeout 后未超时

我们正在尝试通过server.connection-timeout在 application.yml中设置来诊断超时问题

为了探索解决方案,我们首先尝试导致连接超时。这个想法是将超时设置为 10 秒并导致 GSP 页面超时。但是,我们发现我们无法通过修改 index.gsp 并添加Thread.sleep(20000).

复制说明:

  • 从 grails forge 创建一个 grails 应用程序:

    /li>
  • 修改application.yml

    /li>
  • 在 index.jsp 中添加睡眠循环

    /li>
  • 启动时加载应用程序的默认页面

笔记:

  • 通过调试Tomcat生命周期,我可以看到嵌入式servlet容器在初始化时被分配了10000ms的配置。
  • 如果我将睡眠循环更改为 65 秒,我仍然没有超时。大多数文档都提到默认值是 60s)