Playframework2就像春天的反向路由一样

时间:2014-11-22 17:43:16

标签: spring routing reverse thymeleaf

任何人都可以在春天给我建议路由机制。

我使用thymeleaf作为我的观点,我想在视图中使用我的网址的类名和方法名称 - 就像在playframework中一样。

但我喜欢在春天我在控制器方法声明之前定义url。

为你的消化做准备。感谢。

2 个答案:

答案 0 :(得分:3)

从4.1版开始,Spring Framework提供了一种从模板生成资源路由的方法(即视图中的反向路由)。

您可以查看the reference documentation on the subject,但它基本上是使用自动生成的命名路由。

我不知道Thymeleaf是否支持标准方言,但是you could quite easily extend it;如果没有,这可能是Thymeleaf项目的一个特色。

假设你有一个像这样的MyUserController:

@Controller
public class MyResourceController {

  @RequestMapping("/user/{name}")
  public String showUser(String name, Model model) {

    ...
    return "show";
  }
}

使用这样的方言,你可以参考这样的动作:

<a th:uri="mvcUrl('MRC#ShowUser').buildAndExpand('bob')">Show user Bob</a>
<!-- will generate "/user/bob" -->

答案 1 :(得分:1)

这是spring框架中的一般流程。

  1. 每当用户发出请求时,它将首先转到Spring的DispatcherServlet。 DispatcherServlet作业是将请求发送到spring mvc controller(自定义控制器)

  2. 您可以像这样定义自定义控制器:

  3. 控制器:(代码段)

    package nl.springexamples.mvc;
    
     import org.springframework.stereotype.Controller;
     import org.springframework.web.bind.annotation.RequestMapping;
     import org.springframework.web.bind.annotation.RequestMethod;
     /**
      * Handles requests for the application home page.
      */
     @Controller
     public class HomeController {
        @RequestMapping(value = "/test", method = RequestMethod.GET)
        public String test(){
            return "test";
        }
    }
    
    1. 在servlet-上下文文件中,提及控制器的目录/包路径。

      示例:<context:component-scan base-package="nl.springexamples.mvc"/>

    2. 在上面的控制器中,它返回字符串'test',它是视图文件的名称(通常是jsp)。

    3. JSP文件: test.jsp

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      <h1> Welcome to Spring!!!</h1>
      </body>
      </html>
      
      1. 将此字符串名称的逻辑映射定义为servlet-context中的视图文件,如下所示:
      2. 示例:如何定义internalViewResolver如下所示

        <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the       /WEB-INF/views directory -->
        
        <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value ="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
        </beans:bean>
        

        我认为,这几乎是关于spring mvc和它的路由流程。我希望它对你有帮助。