问题标签 [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.
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:
- What is the purpose of that interface service?
- Where is that documented?
- How to customize? Like being implemented by a custom service?
Sample service:
grails - Grails 3.3.x 处理文件上传最大大小超出异常
我正在阅读有关文件上传的本教程:https ://guides.grails.org/grails-upload-file/guide/index.html
但是即使文件大小限制设置为 25MB,也没有描述当上传的文件超过这个值时如何处理 FileUploadBase$SizeLimitExceededException 异常。如果有限制,即使它太大,有人会碰到它并想向用户显示一个很好的错误,但异常似乎发生在执行我的控制器代码之前。
问题是:如何在 Grails 3.3.x 应用程序上处理这种异常?
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() 中设置的值没有保存到数据库中发生了什么。任何指针?
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 上。
servlets - 如何在 Grails 中将真实路径作为字符串获取
使用 grails-3.3.1 开发项目并生成 Runnable WAR 文件。当我使用命令运行时:
它正在返回null
以下行:
但是当部署在 Tomcat 容器中时它工作正常。
然后尝试了以下方法:
它正在返回,但不是预期的,也不是getRealPath()
返回的。它是这样返回的:
这对我没有用。找到建议使用getResourceAsStream()
但我不想要资源的答案,我只想要String
.
validation - 如何使自定义约束在 Grails 3.3.10 中工作?
我们正在从 Grails 2.5.4 迁移到 Grails 3.3.10。在众多障碍中,一个是我们的注册自定义约束不再起作用。经过一些研究,我们发现在 Grails 3.3.10 中有一种新的方式来声明和注册这些约束。
即使遵循了这些步骤,这些约束似乎也被忽略了。我在这里错过了什么吗?
自定义约束类:
我在 Bootstrap.groovy 的 init 块中注册了这个约束,如下所示:
我可以看到这个约束已经添加到Registry中,如下:
我在一个可验证的类中使用了这个约束,如下所示:
hibernate - 如何使用休眠 Envers 触发实体 onLoad()?
我正在将 Hibernate Envers 添加到我的 Grails 3 项目中。我注意到对于我的一个实体,它有一个onLoad()
事件,该onLoad()
事件永远不会为 Envers 修订实体调用。
如何确保始终调用此代码,即使对于此实体的历史修订也是如此?
用例:
我正在使用 Grails 3 JSON 视图开发 RESTful 服务。我的一个域类有一个鉴别器列,它也必须在 JSON 输出中呈现,以便消费者知道它是什么类型。出于这个原因,域实体定义了一个onLoad()
方法来填充与鉴别器类型匹配的瞬态属性:
这适用于普通域实例,但是当我从 Envers' 查找实体修订时AuditQueryCreator
,审计查询没有调用该onLoad()
方法。
似乎我可以遍历结果并手动调用onLoad()
,但我希望有更好的方法来解决这个问题。
提前致谢!
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 设置简化为一行,但没有帮助:
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
工作正常。
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)