2012-01-06 15 views
12

Używam wiosny 3.0 i mam naprawdę proste pytanie, ale nie znalazłem żadnej odpowiedzi w Internecie. Chcę, aby wygenerować ścieżkę (URI), podobnie jak w moim JSP:Jak wygenerować URI wewnątrz kontrolera na wiosnę 3

<spring:url value="/my/url" /> 

Ale wewnątrz kontrolera. Jaką usługę należy wybrać? Dzięki!

Edycja: Może to być związane z tym: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-resourceloader? Czy nie ma lepszego rozwiązania?

Odpowiedz

2

powiedziałbym

request.getRequestURL() + "/my/url" 

czyni pracę. Nie ma takiego zbudowany w funkcjonalności, wiosna: url zwraca UrlTag.class który ma poniżej metodę generowania URL, można użyć go jako insőiration o kodzie:

private String createUrl() throws JspException { 
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); 
    HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); 
    StringBuilder url = new StringBuilder(); 
    if (this.type == UrlType.CONTEXT_RELATIVE) { 
     // add application context to url 
     if (this.context == null) { 
      url.append(request.getContextPath()); 
     } 
     else { 
      url.append(this.context); 
     } 
    } 
    if (this.type != UrlType.RELATIVE && this.type != UrlType.ABSOLUTE && !this.value.startsWith("/")) { 
     url.append("/"); 
    } 
    url.append(replaceUriTemplateParams(this.value, this.params, this.templateParams)); 
    url.append(createQueryString(this.params, this.templateParams, (url.indexOf("?") == -1))); 

    String urlStr = url.toString(); 
    if (this.type != UrlType.ABSOLUTE) { 
     // Add the session identifier if needed 
     // (Do not embed the session identifier in a remote link!) 
     urlStr = response.encodeURL(urlStr); 
    } 

    // HTML and/or JavaScript escape, if demanded. 
    urlStr = isHtmlEscape() ? HtmlUtils.htmlEscape(urlStr) : urlStr; 
    urlStr = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(urlStr) : urlStr; 

    return urlStr; 
} 
+0

To zły sposób na zrobienie tego. Potrzebuję usługi, która jest używana przez do generowania adresów URL ... Potrzebuję czystej drogi, proszę – Nanocom

+0

Źle w jaki sposób? Nie ma takiej usługi, wiosna: URL mniej więcej tak samo, patrz źródło dołączone. –

+0

OK, jeśli to powiesz ... Ale to szalone, że nie pomyśleli o tym, moim zdaniem! – Nanocom

20

Wiosną MVC 3.1 można użyć UriComponentsBuilder i jego pod-klasa ServletUriComponentsBuilder. Istnieje przykład tego here. Możesz także przeczytać o UriComponentsBuilder w reference docs.

+0

Dziękuję, ale zapomniałem powiedzieć, że używam Spring 3.0 ... Piła jest nowy w psring 3.1, więc zakładam, że takiego buildera URI nie ma w Spring 3.0 – Nanocom

35

Sugestia Rossena jest złota.

Istnieje również klasa ServletUriComponentsBuilder z wersji 3.1, która buduje adresy URL z bieżącego żądania w sposób statyczny. Na przykład:

ServletUriComponentsBuilder.fromCurrentContextPath().path("/my/additional/path").build().toUriString(); 

To najbliższa rzecz do <spring:url> w serwletu.

Powiązane problemy