Reputation: 1927
I am using Thymeleaf Template Engine with Spring Web MVC and I am got stuck while creating url's with the help of current url. Is there any way to get current inside Thymeleaf HTML file? eg: Suppose my current url in my browser address bar is:
http://localhost:8080/project/web/category/mobiles
and now I want to make a url like this http://localhost:8080/project/web/category/mobiles/store/samsung
or
http://localhost:8080/project/web/category/mobiles?min_price=10&max_price=100
.
So I the code will look like this
<a th:with="currentUrl='http://localhost:8080/project/web/category/mobiles'"
th:href="@{__${currentUrl}__/__${store.name}__}">
Click to More Result
</a>
Here I am using currentUrl
variable with hardcoded url, So I want to some solution for the same. The hardcoded value will not work everytime because I have dynamic categories.
I tried the same with relative url but its not working for me.
<a th:href="@{/store/__${store.name}__}">Click to More</a>
//will produce: http://localhost:8080/project/web/store/samsung
//I want: http://localhost:8080/project/web/category/mobiles/store/samsung
Please have a look and let me know if am I doing something wrong.
Upvotes: 35
Views: 63726
Reputation: 38779
As of Thymeleaf 3.1 there appears to be no way to access the current request by default.
You will need to add it manually to the context, for example:
@ModelAttribute("currentUrl")
public String getCurrentUrl(HttpServletRequest request) {
return request.getRequestURI();
}
<a th:href="@{__${currentUrl}__/__${store.name}__}">
Click to More Result
</a>
Upvotes: 3
Reputation: 1149
In Thymeleaf 3.1, the current URL can be obtained from the context object:
<form th:action="${#ctx.springRequestContext.requestUri}">
Upvotes: 10
Reputation: 16505
If the requested url is for example : http://localhost:8080/my-page
I could get this value: /my-page using this: httpServletRequest.requestURI
For example, if you have to load some resource , you can use:
<script th:src="@{|${#httpServletRequest.requestURI}/main.js|}"></script>
And renderized html will be:
<script src="/my-page/main.js"></script>
Upvotes: 3
Reputation: 14551
You can get the current URL using two single '
quotes. Example:
<a th:href="@{''(lang=de)}">Deutsch</a>
Note that this unfortulately does not include existing URL parameters.
Upvotes: 32
Reputation: 1927
Oh I got the solution for this. I missed the {#httpServletRequest.requestURI}
in the documentation.
Here is the solution which is working for me:
<a th:href="@{__${#httpServletRequest.requestURI}__/store/__${store.name}__}">Click to More</a>
//Will produce: http://localhost:8080/project/web/category/mobiles/store/samsung
Upvotes: 47