0
votes

Thymeleaf Th: Chaque ne peut pas trouver objet

J'utilise Thymeleaf avec Springboot 2.1.2, et j'ai un problème avec Thymeleaf's TH: chaque étiquette. Voici mon code: xxx pré>

Cependant, je rencontre l'exception suivante: p> xxx pré>

Le débogueur dit qu'il ne trouve pas la variable, cependant Je suis sûr que la vue a un objet contraignant nommé «utilisateur» parce que je l'utilise d'autre où à l'avant. P>

Voici mon contrôleur et mes entités: P>

user.getAddressList().stream().forEach(x -> System.out.println(x.getLocation()));


9 commentaires

Vérifiez la valeur de l'objet utilisateur dans votre contrôleur. Il est présent ou non et imprimé


Votre association utilisateur et adresse est paresseuse. essayer avec fetchtypehe.action


@Govindparashar J'ai imprimé avec succès la liste, ce n'est pas null. Que devrais-je faire ensuite?


@Govindparashar and getchtype.eager ne m'aide pas.


Avez-vous imprimé une adresse adressée?


@Govindparashar oui je l'imprime, je veux dire, je imprime tous les éléments de la liste: user.getaddresslist (). ROUs (). Foreach (x -> system.out.println (x.getlocation ()));


Mettez à jour votre question avec la mise en œuvre de userservice.getprofile (email)


Cette exception est étrange. Êtes-vous sûr que cela vient de cela: chacun que vous avez mis ici? Essayez de supprimer ce bloc de votre HTML et de le redéployer. Si aucune exception, le problème est le th: chacun comme vous avez dit


J'ai compris. Voir ma réponse, j'ai remplacé l'ancien texte


3 Réponses :


0
votes

problème non liée à la JPA après tout. Le problème est de savoir comment vous utilisez th: champ code>. Voir la documentation sur l'utilisation correcte: HTTPS: //www.thymelleaf. Org / doc / Tutoriels / 2.1 / Thymeleafspring.html # Dynamic-champs

Essayez ceci: p>

<tr th:each="addr,addrStat : ${user.addressList}">
        <td><input type="text" th:value="${addr.name}" th:field="*{addressList[__${addrStat.index}__].name}"></td>


2 commentaires

Je modifie la méthode du contrôleur et ajoutez une ligne avant de renvoyer la vue: user.getaddresslist (). flux (). foreach (x -> system.out.println (x.getlocation ())); Je suppose que c'est la même chose que vous avez suggéré. Cependant, cela n'aide pas :(


Merci! Vous avez un peu plus tôt avec l'idée correcte que moi :)



0
votes

Vous avez cette erreur: - xxx

car vous utilisez @modelattribute annotation sur votre contrôleur. addr à votre contrôleur après soumission, mais vous n'envoyez aucun objet par le nom exact addr dans / depuis votre Contrôleur d'où vous ouvrez votre page HTML demandée.

Voici un exemple rapide de la manière dont vous envoyez un objet en utilisant @modelattribute Annotation: -

1.) Votre contrôleur demandé où vous ouvrez la page HTML demandée serait quelque chose comme ceci: -
xxx

2.) Et après avoir soumis votre prochain contrôleur Serait quelque chose comme ceci: -
xxx

PS - Pour plus d'informations Qu'est-ce que @Modelattribute fait / est, voici une référence rapide: -

Qu'est-ce que @modelattribute au printemps MVC?


1 commentaires

addr est juste la variable locale dans TH: chaque itération sur utilisateur.Addresslist et utilisateur est correctement défini dans le modèle



0
votes

Je pensais avoir trouvé le problème ... C'est très délicat ... Je modifie le Th: chaque bloc, et maintenant c'est comme:

    <tr th:each="addr : ${user.addressList}">
        <td><input type="text" th:value="${addr.name}"></td>
        <td><input type="text" th:value="${addr.phone}"></td>
        <td><input type="text" th:value="${addr.location}"></td>
        <td><a th:href="@{/user/addr/del/{id}(id=${addr.id})}">del</a></td>
    </tr> 


1 commentaires

Vous ne devriez pas les séparer, vous pouvez profiter de la liaison de printemps MVC. TH: champ indique le champ dans l'objet de modèle où la valeur de l'entrée doit être stockée lors de la soumission. Donc, il fait référence au nom de champ dans votre référence objet et non à la variable intersation addr