使用grails,我可以在UrlMappings.groovy中指定控制器, *** 作和视图吗?

使用grails,我可以在UrlMappings.groovy中指定控制器, *** 作和视图吗?,第1张

概述使用Grails,在UrlMappings.groovy中,似乎我可以指定控制器和 *** 作: "/someURL" (controller: "Some", action: "someAction") 或者我可以指定视图: "/someURL" (view: "someView") 但我无法指定控制器, *** 作和视图: "/someURL" (controller: "Some", action: "so 使用Grails,在urlmappings.groovy中,似乎我可以指定控制器和 *** 作:

"/someURL" (controller: "Some",action: "someAction")

或者我可以指定视图:

"/someURL" (vIEw: "someVIEw")

但我无法指定控制器, *** 作和视图:

"/someURL" (controller: "Some",action: "someAction",vIEw: "someVIEw")

相反,我必须在控制器中指定视图.有没有办法在urlmappings.groovy中指定视图?或者它是不可能的?

解决方法 要做到这一点,您首先需要知道Grails使用Spring Web. Spring Web是我能想到的最复杂的Web框架(能够做任何事情AFAIK).无论如何,重要的是要知道Spring Web的请求生命周期是如何工作的.您可以通过阅读“dispatcherServlet”的文档来了解它,它是Spring Web中的主要Servlet(因此也是Grails中):
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html

这是grails团队关于grails如何真正只是spring的一篇很棒的文章:
http://spring.io/blog/2010/06/08/spring-the-foundation-for-grails/

与此问题相关的重要部分是该文档中的这两行:

>可以通过VIEwResolver实现指定其视图解析策略,将符号视图名称解析为VIEw对象.默认为InternalResourceVIEwResolver. VIEwResolver对象可以作为bean添加到应用程序上下文中,覆盖默认的VIEwResolver. VIEwResolvers可以被赋予任何bean名称(它们按类型进行测试).
>如果用户未提供视图或视图名称,则配置的RequestToVIEwnameTranslator会将当前请求转换为视图名称.相应的bean名称是“vIEwnameTranslator”;默认值为DefaultRequestToVIEwnameTranslator.

您真正想要做的是创建自定义的VIEwResolver或RequestToVIEwnameTranslator.这个世界非常复杂 – 如果用户在Grails Controller中明确地提供了VIEw,那么你需要一个VIEwResolver.如果返回一个Map(或其他一些自定义对象),那么你需要一个RequestToVIEwnameTranslator.

不要忘记grails已经定制了这两件事,使用整个“约定优于配置”的想法.所以,你必须小心你如何实现你的 – 我建议看看这些东西的grails默认实现.

GrailsVIEwResolver的源代码在这里:
https://github.com/grails/grails-core/blob/master/grails-web/src/main/groovy/org/codehaus/groovy/grails/web/servlet/view/GrailsViewResolver.java

现在,真正的乐趣开始了. grails团队不仅提供spring web的默认生命周期的自定义实现,还完全定制了调度程序servlet.这意味着您需要了解他们的宇宙与春天宇宙的不同之处(从而使许多有用的春季论坛问题变得无关紧要).这是GrailsdispatcherServlet源代码的链接:
https://github.com/grails/grails-core/blob/master/grails-web/src/main/groovy/org/codehaus/groovy/grails/web/servlet/GrailsDispatcherServlet.java

因此,如果你设法读到这一点,你可以想象如何编写自定义视图解析器来返回你想要的视图,但是如何访问URL映射配置数据,这样你就可以在那里定义视图(但是你看到了适合). UrlMapPings文件与spring bean有关,可以使用属性“grailsUrlMapPingsHolderBean”进行自动装配 – 参见http://grails.org/doc/2.3.4/ref/Plug-ins/URL%20mappings.html

从该bean,您可以访问UrlMapPings对象,您可以访问所有UrlMapPing定义.看到:
https://github.com/grails/grails-core/blob/master/grails-web/src/main/groovy/org/codehaus/groovy/grails/web/mapping/UrlMappings.java
https://github.com/grails/grails-core/blob/master/grails-web/src/main/groovy/org/codehaus/groovy/grails/web/mapping/UrlMapping.java

我不完全相信你是否可以在那里扔任何东西,但因为它很时髦我认为你可以.如果没有,您将至少有两个选择:

>为自定义视图/视图名称解析器将使用的控制器/视图映射创建新的配置文件
>根据grails源自定义URLMapPings以解释您的自定义配置

有点偏离主题,这是一篇有趣的文章,关于删除默认的映射文件和自己滚动自己:
http://mrhaki.blogspot.com/2011/12/grails-goodness-customize-url-format.html

再一次,我在网上发现了几个人们沿着这条路走下去的帖子,但由于需要使众多配置工具发挥作用,它最终变得太难了.因此,我强烈建议反对它.在某种程度上,我同意这个页面上的回复(这将是你将看到的很多尝试从grails世界做一些事情):
Bypassing grails view resolvers?

总结

以上是内存溢出为你收集整理的使用grails,我可以在UrlMappings.groovy中指定控制器, *** 作和视图吗?全部内容,希望文章能够帮你解决使用grails,我可以在UrlMappings.groovy中指定控制器, *** 作和视图吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存