2013-01-16 24 views
9

WebApp'ımda rotanın kullanımını yönetmenin bir yolunu arıyorum. Temel olarak, bir yönlendirici modelini paylaşabilecek üç yerim var. Ve bu kalıbı görünümlerimden ifade dili ile kullanmak için gönderebilirim.Bahar MVC ile Uygulama Yolları

@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"; 
    } 
} 

desenler

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

görünümler:

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

Başlangıçta, RequestMapping sabit bir değer ister, dolayısıyla bu statik dönüş ile Rota sınıfını uygulamak için bir sorun oluşturur. Herhangi bir çözüm var mı?

1) Şimdi bu mümkün seti RequestMapping

@Controller 
public class HomeController extends AbstractController { 

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

} 
var ...

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) Benim Controller üzerinde kullandıkları bir Rotalar sınıf oluşturmak şu şekildedir:

+0

Üzgünüm, anlamak zor, ne demek 'uygulama yolları' derken. Not; ** sonra ** veya **, ** ile ** arası bir değer giremez, yani doğru biçim _could share_, _could to share_ değil. – informatik01

+0

Kodun kolay bakımı benim hedefim. – claudioivp

+2

Lütfen sorunuzu yeniden formüle etmeye çalışın. Amacınız daha açık olmalı. Her iyi geliştiricinin hedefi, sürdürülebilir kod oluşturmaktır - Lütfen sorunuza daha spesifik örnekler verin. – ninnemannk

cevap

9

Ben bir çözüm buldu

3) benim görünümlerde kullanmak Rotalar set

public abstract class AbstractController { 

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

} 

4) Ve bu görünümler

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

Eski soru, biliyorum, ancak gelecekteki araştırmacılar için: her bir denetleyiciyle ilişkili modele rota sınıfına bir başvuru eklemek için '@ ControllerAdvice' ve' @ ModelAttribute' kombinasyonunu da kullanabilirsiniz. – UrLicht

+0

Bir örneğiniz var mı? – claudioivp

7

çek dışarı GitHub'dan SpringMVC yönlendirici projesi üzerinde kullanmak artık: bu SpringMVC

için oyunun yolları dosyasının bir uygulama

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

olduğunu

+0

"en son taahhüt Şubat 2015" –