Thymeleaf context URL processing - how to add language code to context-relative URLs (Spring + Thymeleaf)

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Thymeleaf context URL processing - how to add language code to context-relative URLs (Spring + Thymeleaf)

Warxim
I have written request filter and locale resolver for getting language code from URL. (for example: DOMAIN/en/, DOMAIN/cs/)

However, I don't know how to change programmatically the context path that Thymeleaf uses for its context-relative URLs (@{/css/main.css}).

For example, if on page with address "DOMAIN/en/test/" is following code

<a th:href="@{/test2/}">TEST 2</a>
it points at

DOMAIN/test2/
instead of

DOMAIN/en/test2/
I thought it would be good to create some filter that edits the URL before it goes to Thymeleaf templates, but I don't have any idea how.

Do you have any ideas how to solve it?
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Thymeleaf context URL processing - how to add language code to context-relative URLs (Spring + Thymeleaf)

Warxim
I've found solution that suits my expectations.

I just wanted to insert language code after context path (example.com/CONTEXT_PATH/CONTROLLER -> example.com/CONTEXT_PATH/LANGUAGE_CODE/CONTROLLER) for Thymeleaf templates, so I can still use Thymeleaf's url expression @{/controller}.

I have url filter that removes language code and adds it to request's attributes, so I have just edited the response's encodeURL method and it works as I wanted:

getServletContext().getRequestDispatcher(newUrl).forward(request, new HttpServletResponseWrapper(response) {
    @Override
    public String encodeURL(String url) {
        String contextPath = getServletContext().getContextPath();
        if (url.startsWith(contextPath))
            url = new StringBuilder(url).insert(contextPath.length(), "/" + getLocale().getLanguage()).toString();
        return super.encodeURL(url);
    }
});
Loading...