Reputation: 16117
Here's my code, where I'm iterating through:
<tr th:each="category : ${categories}">
<td th:text="${category.idCategory}"></td>
<td th:text="${category.name}"></td>
<td>
<a th:href="@{'/category/edit/' + ${category.id}}">view</a>
</td>
</tr>
The URL it points to is supposed to be /category/edit/<id of the category>
, but it says it could not parse the expression:
Exception evaluating SpringEL expression: "category.id" (category-list:21)
Upvotes: 58
Views: 199377
Reputation: 1
Hi you can use thymeleaf preprocessing :
<tr th:each="category : ${categories}">
<td th:text="${category.idCategory}"></td>
<td th:text="${category.name}"></td>
<td>
<a th:href="@{__${category.idCategory}__}">view</a>
</td>
</tr>
Upvotes: 0
Reputation: 11
You can also use ${yourVariable}
for exampe <th:href="/category/edit/__${yourVariable}__">View</a>
Upvotes: 0
Reputation: 49
You can use:
html:
<html xmlns:th="http://www.thymeleaf.org">
<a th:href="@{'/category/'+ ${item.idCategory}}">View</i></a>
Controller: @PathVariable String parentId
Upvotes: 4
Reputation: 1
try this one is a very easy method if you are in list of model foreach (var item in Modal) loop
<th:href="/category/edit/@item.idCategory>View</a>"
or
<th:href="/category/edit/@item.idCategory">View</a>
Upvotes: 0
Reputation: 5053
You can use like
My table is bellow like..
<table>
<thead>
<tr>
<th>Details</th>
</tr>
</thead>
<tbody>
<tr th:each="user: ${staffList}">
<td><a th:href="@{'/details-view/'+ ${user.userId}}">Details</a></td>
</tr>
</tbody>
</table>
Here is my controller ..
@GetMapping(value = "/details-view/{userId}")
public String details(@PathVariable String userId) {
Logger.getLogger(getClass().getName()).info("userId-->" + userId);
return "user-details";
}
Upvotes: 5
Reputation: 1708
Your code looks syntactically correct, but I think your property doesn't exist to create the URL.
I just tested it, and it works fine for me.
Try using category.idCategory
instead of category.id
, for example…
<tr th:each="category : ${categories}">
<td th:text="${category.idCategory}"></td>
<td th:text="${category.name}"></td>
<td>
<a th:href="@{'/category/edit/' + ${category.idCategory}}">view</a>
</td>
</tr>
Upvotes: 14
Reputation: 5948
I think your problem was a typo:
<a th:href="@{'/category/edit/' + ${category.id}}">view</a>
You are using category.id
, but in your code is idCategory
, as Eddie already pointed out.
This would work for you:
<a th:href="@{'/category/edit/' + ${category.idCategory}}">view</a>
Upvotes: 62
Reputation: 21
"List" is an object getting from backend and using iterator to display in table
"minAmount" , "MaxAmount" is an object variable "mrr" is an just temporary var to get value and iterate mrr to get data.
<table class="table table-hover">
<tbody>
<tr th:each="mrr,iterStat : ${list}">
<td th:text="${mrr.id}"></td>
<td th:text="${mrr.minAmount}"></td>
<td th:text="${mrr.maxAmount}"></td>
</tr>
</tbody>
</table>
Upvotes: 2
Reputation: 303
I was trying to go through a list of objects, display them as rows in a table, with each row being a link. This worked for me. Hope it helps.
// CUSTOMER_LIST is a model attribute
<table>
<th:block th:each="customer : ${CUSTOMER_LIST}">
<tr>
<td><a th:href="@{'/main?id=' + ${customer.id}}" th:text="${customer.fullName}" /></td>
</tr>
</th:block>
</table>
Upvotes: 5
Reputation: 1453
The right way according to Thymeleaf documention for adding parameters is:
<a th:href="@{/category/edit/{id}(id=${category.idCategory})}">view</a>
Upvotes: 123
Reputation: 421
A cleaner and easier way to do this
<a href="somepage.html" th:href="@{|/my/url/${variable}|}">A Link</a>
I found this solution in Thymeleaf Documentation on "4.8 Literal substitutions".
Upvotes: 32
Reputation: 41
I think you can try this:
<a th:href="${'/category/edit/' + {category.id}}">view</a>
Or if you have "idCategory" this:
<a th:href="${'/category/edit/' + {category.idCategory}}">view</a>
Upvotes: 4