Thymeleaf使用路径变量th:href

时间:2015-11-17 09:59:49

标签: java spring spring-mvc spring-boot spring-el

这是我正在迭代的代码:

      <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>

它指向的网址应为/category/edit/<id of the category>

它说它无法解析表达式:

      Exception evaluating SpringEL expression: "category.id" (category-list:21)

11 个答案:

答案 0 :(得分:27)

您好我认为您的问题是类型错误

<a th:href="@{'/category/edit/' + ${category.id}}">view</a>

您正在使用category.id,但代码中的 idCategory 正如Eddie所说

这对你有用

<a th:href="@{'/category/edit/' + ${category.idCategory}}">view</a>

答案 1 :(得分:9)

更简洁明了的方法

<a href="somepage.html" th:href="@{|/my/url/${variable}|}">A Link</a>

我在Thymeleaf Documentation的“4.8 Literal substitutions”中找到了这个解决方案。

答案 2 :(得分:7)

根据Thymeleaf documention for adding parameters的正确方法是:

<a th:href="@{/category/edit/{id}(id=${category.idCategory})}">view</a>

答案 3 :(得分:3)

您可以使用

  1. 我的桌子很像..

    <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>
    
  2. 这是我的控制器..

    @GetMapping(value = "/details-view/{userId}")
    public String details(@PathVariable String userId) { 
    
        Logger.getLogger(getClass().getName()).info("userId-->" + userId);
    
     return "user-details";
    }
    

答案 4 :(得分:2)

您的代码在语法上看起来是正确的,但我认为您的属性不存在以创建网址。

我刚试过它,对我来说效果很好。

尝试使用category.idCategory而不是category.id,例如......

  <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>

答案 5 :(得分:2)

我试图浏览一个对象列表,将它们显示为表格中的行,每行都是一个链接。这对我有用。希望它有所帮助。

// 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>

答案 6 :(得分:1)

我想你可以试试这个:

<a th:href="${'/category/edit/' + {category.id}}">view</a>

或者如果你有“idCategory”这个:

<a th:href="${'/category/edit/' + {category.idCategory}}">view</a>

答案 7 :(得分:1)

“列表”是一个从后端获取并使用迭代器显示在表中的对象

“ minAmount”,“ MaxAmount”是一个对象变量 “ mrr”是一个临时的变量,用于获取值,并迭代mrr来获取数据。

<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>

答案 8 :(得分:0)

如果您在模型foreach(模态中的可变项)循环列表中,请尝试使用此方法是一种非常简单的方法

<th:href="/category/edit/@item.idCategory>View</a>"

<th:href="/category/edit/@item.idCategory">View</a>

答案 9 :(得分:0)

您可以使用:

html:

 <html xmlns:th="http://www.thymeleaf.org">

<a th:href="@{'/category/'+ ${item.idCategory}}">View</i></a>

控制器:@PathVariable String parentId

答案 10 :(得分:-1)

这是添加URL的正确方法: @ {$ {'/ category / edit /'+ category.id}}