web-dev-qa-db-fra.com

Thymeleaf utilisant des variables de chemin d'accès à th: href

Voici mon code que j'itère dans:

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

L'URL à laquelle il pointe est supposé être /category/edit/<id of the category>

Il dit qu'il ne peut pas analyser l'expression:

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

Salut, je pense que votre problème était une erreur de type

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

Vous utilisez category.id mais dans votre code est idCategory comme dit Eddie

Cela fonctionnerait pour vous 

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

Un moyen plus propre et plus facile de le faire

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

J'ai trouvé cette solution dans Documentation Thymeleaf sur "4.8 Substitutions littérales".

6
douglasmiguel7

La bonne méthode selon la documentation Thymeleaf pour l’ajout de paramètres est:

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

J'essayais de parcourir une liste d'objets, de les afficher sous forme de lignes dans une table, chaque ligne constituant un lien. Cela a fonctionné pour moi. J'espère que ça aide.

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

Votre code semble syntaxiquement correct, mais je pense que votre propriété n’existe pas pour créer l’URL.

Je viens de le tester et fonctionne bien pour moi. 

Essayez d’utiliser category.idCategory au lieu de category.id, par exemple ...

  <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>
2
Eddie Jaoude

"List" est un objet récupéré depuis le backend et utilisant un itérateur pour s'afficher dans un tableau.

"minAmount", "MaxAmount" est une variable d'objet "mrr" est une variable temporaire juste pour obtenir une valeur et itérer mrr pour obtenir des données.

<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>
1
Shanmukh Sravanth

Je pense que vous pouvez essayer ceci:

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

Ou si vous avez "idCategory" ceci:

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