2013-01-16 40 views
9

Tôi đang tìm cách quản lý việc sử dụng tuyến đường trên WebApp của tôi. Về cơ bản, tôi có ba địa điểm có thể chia sẻ mẫu bộ định tuyến. Và tôi có thể gửi mẫu này để sử dụng trên quan điểm của tôi, thông qua ngôn ngữ biểu thức.Tuyến đường ứng dụng với Spring MVC

@Controller 
public class LoginRuasController 
{ 
    @RequestMapping("/system/index") 
    public String logout(ModelMap model, HttpSession session) 
    { 
     return "system/index"; 
    } 

    @RequestMapping("/system/logout") 
    public String logout(ModelMap model, HttpSession session) 
    { 
     session.setAttribute("xxx", null); 
     return "redirect:/system/login"; 
    } 
} 

mẫu:

/system/index 
system/index 
redirect:/system/login 

lần xem:

<a href="#{Routes.newuser}">Triple X</a> 

Ban đầu, RequestMapping yêu cầu một giá trị không đổi, vì vậy đây tạo một vấn đề để thực hiện một lớp Route với sự trở lại tĩnh. Có giải pháp nào không?

+0

Xin lỗi, thật khó hiểu, ý của bạn là chính xác bằng cách nói 'các tuyến ứng dụng'. P.S. Sau ** có thể ** hoặc ** có thể ** không đặt ** thành **, tức là biểu mẫu đúng là _could share_, không _could để share_. – informatik01

+0

Việc bảo trì mã dễ dàng là mục tiêu của tôi. – claudioivp

+2

Vui lòng cố gắng cải tổ câu hỏi của bạn. Mục tiêu của bạn nên rõ ràng hơn. Mỗi mục tiêu của nhà phát triển tốt là tạo mã có thể duy trì - Vui lòng mô tả câu hỏi của bạn với các ví dụ cụ thể hơn. – ninnemannk

Trả lời

9

Tôi tìm thấy một giải pháp như sau:

1) Tôi tạo ra một lớp đường

public class Routes { 

    private static HashMap<String, String> routes; 

    public static final String host = "/mywebapp"; 
    public static final String home = "/home"; 
    public static final String login = "/login"; 
    public static final String logout = "/logout"; 

    private static void setRoutes() 
    {  
     if(routes == null) 
     { 
      routes = new HashMap<String, String>(); 

      routes.put("host", host); 
      routes.put("home", host + home); 
      routes.put("entrar", host + entrar); 
      routes.put("sair", host + sair); 
     } 
    } 

    public static HashMap<String, String> getRoutes() 
    { 
     setRoutes(); 

     return routes; 
    } 

    public static String getRoute(String destin) 
    { 
     setRoutes(); 

     return routes.get(destin); 
    } 

} 

2) Tôi sử dụng trên điều khiển của tôi ... Bây giờ nó có thể thiết lập một RequestMapping

@Controller 
public class HomeController extends AbstractController { 

    @RequestMapping(Routes.home) 
    public String home(ModelMap model) 
    { 
     preRender(model);  
     return Routes.home; 
    } 

} 

3) Tôi đặt Các tuyến để sử dụng trên quan điểm của tôi

public abstract class AbstractController { 

    protected void preRender(ModelMap model) { 
     model.addAttribute("routes", Routes.getRoutes()); 
    } 

} 

4) Và nó sẵn ngay bây giờ để sử dụng trên các quan điểm

<body> 
    <p>Mary is singing.</p> 
    <p><a href="${routes.home}">Home</a></p> 
</body> 
+1

Câu hỏi cũ, tôi biết, nhưng đối với người tìm kiếm trong tương lai: bạn cũng có thể sử dụng kết hợp '@ ControllerAdvice' và' @ ModelAttribute' để thêm tham chiếu đến lớp tuyến vào mô hình được liên kết với mọi bộ điều khiển. – UrLicht

+0

bạn có ví dụ không? – claudioivp

7

kiểm tra ra các dự án Router SpringMVC trên GitHub:

https://github.com/resthub/springmvc-router

nó là một thực hiện tập tin các tuyến đường của vở kịch cho SpringMVC

+0

"cam kết mới nhất tháng 2 năm 2015" –

Các vấn đề liên quan