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)
This question is related to
java
spring
spring-mvc
spring-boot
spring-el
The right way according to Thymeleaf documention for adding parameters is:
<a th:href="@{/category/edit/{id}(id=${category.idCategory})}">view</a>
"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>
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>
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>
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>
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".
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";
}
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>
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>
Source: Stackoverflow.com