2013-01-16 16 views
9

Szukam sposobu na zarządzanie wykorzystaniem trasy w mojej aplikacji WebApp. Zasadniczo mam trzy miejsca, które mogą współdzielić wzorzec routera. Mogę wysłać ten wzór do wykorzystania w moich poglądach, poprzez język ekspresji.Trasy aplikacji ze sprężyną 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"; 
    } 
} 

wzory:

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

odsłony:

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

Początkowo RequestMapping żąda stałą wartość, więc to wygenerowanie problem zaimplementować klasę statyczną trasę z powrotem. Czy jest dostępne jakieś rozwiązanie?

+0

Niestety, trudno zrozumieć, co masz na myśli mówiąc "trasy aplikacji". P.S. Po ** może ** lub ** może ** nie wstawiać ** do **, tzn. Właściwą formą jest _dould share_, a nie _ może do share_. – informatik01

+0

Łatwe utrzymanie kodu jest moim celem. – claudioivp

+2

Spróbuj ponownie sformułować swoje pytanie. Twój cel powinien być bardziej przejrzysty. Celem każdego dobrego programisty jest stworzenie możliwego do utrzymania kodu. Opisz swoje pytanie za pomocą dokładniejszych przykładów. – ninnemannk

Odpowiedz

9

znalazłem rozwiązanie, w następujący sposób:

1) utworzyć klasę Trasy

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) używam na moim kontrolera ... Teraz jest to możliwe, ustawić RequestMapping

@Controller 
public class HomeController extends AbstractController { 

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

} 

3) ustawić Trasy używać na moich poglądów

public abstract class AbstractController { 

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

} 

4) I to jest już dostępna do wykorzystania w widokach

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

Stare pytanie, wiem, ale dla przyszłych poszukiwaczy: można również użyć kombinacji "@ ControllerAdvice" i "@ ModelAttribute", aby dodać odniesienie do klasy tras do modelu powiązanego z każdym kontrolerem. – UrLicht

+0

czy masz przykład? – claudioivp

Powiązane problemy