2010-03-27 12 views
14

Me pregunto si hay alguna buena práctica para direccionar los controladores Spring en JSP.Spring + JSP url building mejores prácticas

Supongamos que tengo controlador:

@Controller 
class FooController { 

    // Don't bother about semantic of this query right now 
    @RequestMapping("/search/{applicationId}") 
    public String handleSearch(@PathVariable String applicationId) { 
    [...] 
    } 
} 

Por supuesto en JSP Puedo escribir:

<c:url value="/search/${application.id}" /> 

Pero es muy difícil cambiar las URL a continuación. Si usted familiarizado con rieles/Grails entonces ahora cómo este problema resuelto:

redirect_to(:controller => 'foo', :action = 'search') 

Pero en la primavera hay tanta UrlMappers. Cada UrlMapper tiene su propio esquema semántico y vinculante. El esquema de Rails por igual simplemente no funciona (a menos que lo implemente usted mismo). Y mi pregunta es: ¿hay alguna forma más conveniente de abordar el controlador de JSP en Spring?

Respuesta

10

Espero que he entendido su pregunta. Creo que preguntas acerca de cómo mantener las URL cuando las cadenas de URL están en jsp y las asignaciones de controlador.

Su controlador debe hacer la lógica, su JSP debe hacer la salida. La construcción de una URL debe ser responsabilidad del controlador que la maneja. Así

class SearchController { 

    @RequestMapping("/search/{applicationId}") 
    public String handleSearch(@PathVariable String applicationId) { 
    [...] 
    } 

    public String getUrl(Long applicationId) { 
     return "/search/" + applicationId; 
    } 
} 

class StartController { 
    private SearchController controller; 

    @ModelAttribute("searchUrl") 
    public String getSearchUrl() { 
     return fooController.getUrl(applicationId); 
    } 
} 

y en su start.jsp hacer

<c:url value="${searchUrl}" /> 
+0

Hmm ... Una forma muy conveniente de construir url. Gracias –

+1

+1. Estaba pasando un mal rato tratando de entender @ ModelAttribute-on-a-method hasta ahora. ¡Gracias! –

0

Trate de usar Apache como un front-end para volver a asignar las direcciones URL:

http://www.simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/

De esta manera usted puede cambiar el parámetro applicationId de una cadena de consulta en una URL amigable.

Además, aquí está la documentación para mod_rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

+0

me di cuenta que el ejemplo está en PHP, pero debería volver a escribir su URL en una URL amigable de todos modos. (No importará si está usando JSP/Spring o lo que planea usar) – leeand00

+0

(Además, deberá conectar su contenedor Servlet a Apache, para que las solicitudes de Apache se envíen a su contenedor Servlet y las respuestas transferidas a través de Apache al usuario.) – leeand00

+1

No estoy seguro si esto satisface su pregunta. De cualquier manera, el modo Java EE sería un filtro como este: http://tuckey.org/urlrewrite/ – BalusC