通过grails,我可以在UrlMappings.groovy中指定控制器,操作和视图吗?

画了

使用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”的文档(http://docs.spring.io/spring/docs/current/javadoc-api)了解一下,该文档是Spring Web中的主要Servlet(因此是Grails)。/org/springframework/web/servlet/DispatcherServlet.html

这是grails团队写的一篇很棒的文章,关于grails实际上实际上只是春天: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控制器中显式提供了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

我并不完全相信您是否可以在其中扔东西,但是由于它很时髦,我想您可以。如果没有,您将至少有两个选择:

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

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

再次,我在网上发现了几篇帖子,人们沿着这条路走了下去,由于要使它起作用需要大量的配置,所以最终变得太难了。因此,我强烈建议不要这样做在某种程度上,我同意此页面上的响应(这是您尝试在grails领域中尝试做的很多事情的结果):绕过grails视图解析器?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不使用控制器逻辑的Grails urlMappings操作和控制器行为

来自分类Dev

如何通过php框架中的单个输入脚本呈现控制器动作和视图?

来自分类Dev

我可以控制两个视图控制器之间的转换(即通过用户滑动)吗?

来自分类Dev

我可以控制两个视图控制器之间的转换(即通过用户滑动)吗?

来自分类Dev

在视图控制器之间有很多争论是可以的吗?

来自分类Dev

在视图控制器之间有很多争论是可以的吗?

来自分类Dev

我可以从视图控制器外部引用子视图吗?

来自分类Dev

我们可以在视图的init钩子内访问视图的相应控制器吗?

来自分类Dev

Rails —视图可以通过attr_reader访问访问控制器变量吗?

来自分类Dev

我可以在一个控制器中有两个视图模型吗?

来自分类Dev

我可以防止Rails将实例变量从控制器传递到视图吗?

来自分类Dev

我可以继承自定义视图控制器吗

来自分类Dev

swift xcode iOS:我可以重新使用已加载的模态全屏视图控制器吗?

来自分类Dev

我可以在不使用objectAtIndex的情况下阅读视图控制器吗?

来自分类Dev

我可以防止Rails将实例变量从控制器传递到视图吗?

来自分类Dev

我可以对自定义视图控制器进行子类化吗

来自分类Dev

AngularJS $ modalInstance-我可以在一个控制器中执行此操作吗?

来自分类Dev

我可以在 rails 的单个页面中呈现两个不同的控制器操作吗

来自分类Dev

Groovy / grails如何使用jquery从视图中调用控制器方法

来自分类Dev

Grails 检查来自 groovy 的特定控制器操作的角色访问

来自分类Dev

我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?

来自分类Dev

通过蓝牙连接时,我可以让 XBox 无线控制器 X 系列的音频工作吗?

来自分类Dev

我可以使用一个视图控制器来处理标签栏控制器中的多个视图吗

来自分类Dev

用于休息和其他操作的Grails UrlMappings

来自分类Dev

我可以在表视图控制器中使用另一个表视图吗?

来自分类Dev

Grails找不到控制器的视图

来自分类Dev

屏幕方向更改时,可以在以前的视图控制器上转换视图吗?

来自分类Dev

屏幕方向更改时,可以在以前的视图控制器上转换视图吗?

来自分类Dev

我可以指定对于特定方法到Spring MVC控制器类的控制器级别请求映射无效吗?

Related 相关文章

  1. 1

    不使用控制器逻辑的Grails urlMappings操作和控制器行为

  2. 2

    如何通过php框架中的单个输入脚本呈现控制器动作和视图?

  3. 3

    我可以控制两个视图控制器之间的转换(即通过用户滑动)吗?

  4. 4

    我可以控制两个视图控制器之间的转换(即通过用户滑动)吗?

  5. 5

    在视图控制器之间有很多争论是可以的吗?

  6. 6

    在视图控制器之间有很多争论是可以的吗?

  7. 7

    我可以从视图控制器外部引用子视图吗?

  8. 8

    我们可以在视图的init钩子内访问视图的相应控制器吗?

  9. 9

    Rails —视图可以通过attr_reader访问访问控制器变量吗?

  10. 10

    我可以在一个控制器中有两个视图模型吗?

  11. 11

    我可以防止Rails将实例变量从控制器传递到视图吗?

  12. 12

    我可以继承自定义视图控制器吗

  13. 13

    swift xcode iOS:我可以重新使用已加载的模态全屏视图控制器吗?

  14. 14

    我可以在不使用objectAtIndex的情况下阅读视图控制器吗?

  15. 15

    我可以防止Rails将实例变量从控制器传递到视图吗?

  16. 16

    我可以对自定义视图控制器进行子类化吗

  17. 17

    AngularJS $ modalInstance-我可以在一个控制器中执行此操作吗?

  18. 18

    我可以在 rails 的单个页面中呈现两个不同的控制器操作吗

  19. 19

    Groovy / grails如何使用jquery从视图中调用控制器方法

  20. 20

    Grails 检查来自 groovy 的特定控制器操作的角色访问

  21. 21

    我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?

  22. 22

    通过蓝牙连接时,我可以让 XBox 无线控制器 X 系列的音频工作吗?

  23. 23

    我可以使用一个视图控制器来处理标签栏控制器中的多个视图吗

  24. 24

    用于休息和其他操作的Grails UrlMappings

  25. 25

    我可以在表视图控制器中使用另一个表视图吗?

  26. 26

    Grails找不到控制器的视图

  27. 27

    屏幕方向更改时,可以在以前的视图控制器上转换视图吗?

  28. 28

    屏幕方向更改时,可以在以前的视图控制器上转换视图吗?

  29. 29

    我可以指定对于特定方法到Spring MVC控制器类的控制器级别请求映射无效吗?

热门标签

归档