2013-01-16 45 views
9

我正在尋找一種方法來管理路線在我的WebApp上的使用。基本上,我有三個地方可以共享一個路由器模式。 我可以通過表達式語言將這種模式發送到我的視圖上。使用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"; 
    } 
} 

模式:

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

觀點:

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

最初,RequestMapping請求一個恆定值,所以這產生 一個問題來實現靜態回報Route類。 有沒有解決方案?

+0

對不起,很難理解,你說的'申請路線'是什麼意思。附:在**可以**或**可以**之後**不把**給**,即正確的形式是_可以分享,而不是可以分享。 – informatik01

+0

代碼的簡單維護是我的目標。 – claudioivp

+2

請嘗試重新表達您的問題。你的目標應該更清楚。每個好的開發者的目標都是創建可維護的代碼 - 請用更具體的例子來描述你的問題。 – ninnemannk

回答

9

我找到了解決方法,具體如下:

1)我創建一個路由類

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)我在我的控制器使用......現在,可以設置一個RequestMapping

@Controller 
public class HomeController extends AbstractController { 

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

} 

3)我設置路線上我的看法使用

public abstract class AbstractController { 

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

} 

4),它是現在可以在視圖上

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

老問題,我知道,但對於未來的搜索者:您還可以使用'@ ControllerAdvice'和'@ ModelAttribute'的組合來將路由類的引用添加到與每個控制器關聯的模型。 – UrLicht

+0

你有沒有例子? – claudioivp