使用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或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
我并不完全相信您是否可以在其中扔东西,但是由于它很时髦,我想您可以。如果没有,您将至少有两个选择:
有点偏离主题,这是一篇有关删除默认映射文件并自行滚动的有趣文章:http : //mrhaki.blogspot.com/2011/12/grails-goodness-customize-url-format.html
再次,我在网上发现了几篇帖子,人们沿着这条路走了下去,由于要使它起作用需要大量的配置,所以最终变得太难了。因此,我强烈建议不要这样做。在某种程度上,我同意此页面上的响应(这是您尝试在grails领域中尝试做的很多事情的结果):绕过grails视图解析器?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句