gpt4 book ai didi

grails - Grails 如何解决 Controller 名称冲突?

转载 作者:行者123 更新时间:2023-12-05 00:38:50 25 4
gpt4 key购买 nike

当应用程序 Controller 名称与插件 Controller 名称冲突时,推荐的方法是什么?

我见过这些 Grails JIRA:
GRAILS-4240
GRAILS-1243

...并且 Burt Beckwith 对这两个线程的回复暗示唯一的办法是重命名其中一个 Controller (大概是应用程序 Controller ,因为黑客插件代码是不可取的)

How to use the package name to differentiate between classes in grails?

How to extend/override controller actions of plugins?

但是,Burt 自己的 spring-security-ui 插件提倡命名应用程序 Controller 的确切方法 插件 Controller - 见 spring-security-ui docs .

这种方法实际上似乎适用于开发模式(grails run-app)和将应用程序部署为 WAR 的情况。那么这个功能可以依赖吗?如果是, Controller 冲突解决规则是什么? grails 文档没有提及它。也许伯特可以分享他的见解?

拥有像 grails 这样的“插件”架构,甚至没有基本的命名空间工具来处理这样的冲突,对我来说似乎很糟糕……

最佳答案

问题是,虽然您可以为任何工件使用包,但 Controller 的约定是删除包和“ Controller ”以创建 URL,例如PersonController ->/appname/person/action_name。所以实际上一切都变平了。

在 1.2 和 1.3 中,事情发生了变化,因此插件与应用程序代码分开编译(并首先编译),这使您有机会用应用程序的版本替换插件工件。由于您不应该编辑插件代码,这使您可以灵活地扩展或替换插件工件,只需使用相同的名称。

当有两个类似命名的 Controller 时,我倾向于使用 UrlMappings 来解决这样的问题。例如,假设您有一个允许低级别 CRUD 操作的管理员 UserController 和一个用户使用的常规 UserController。我将管理 Controller 命名为 AdminUserController 并将其映射到/admin/user/* 并保持 UserController 不变。管理 GSP 将在 views/adminUser 中,其他人将在 views/user 中,因此那里没有冲突。这具有能够轻松保护的额外好处 - 映射/admin/** -> ROLE_ADMIN。约定很方便,但这是一个简单的配置步骤,为我解决了这个问题。

好消息是 GRAILS-1243 肯定会在 2.0 中实现,也可能在 1.4 中实现。 Kim Betti 在 GRAILS-1243 的评论中引用的插件看起来很有趣。

关于grails - Grails 如何解决 Controller 名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com