Question

Je suis en train de faire une requête JPA à partir d'un modèle de vue, mais il ne fonctionne pas (je l'ai vérifié qu'il ya des enregistrements à l'aide phpMyAdmin). Je sais que cela devrait normalement se faire par le contrôleur et passé via render, mais cela fait partie de la construction d'un menu qui apparaîtra sur chaque page et je ne veux pas avoir à modifier chaque contrôleur pour y parvenir.

Ce que je suis en train d'essayer est

<ul>
%{
    import models.Building;
    List<Building> buildings = Building.findAll();
}%
#{list items: buildings, as: 'building'}
    <li><a href="">${building}</a></li>
#{/list}
</ul>

mais je reçois le The template /app/views/Networks/grid.html does not compile : unexpected token: ( d'erreur faisant référence à la ligne qui appelle findAll(). Quelle est la bonne façon de le faire?

Était-ce utile?

La solution

Au lieu d'essayer de le faire dans la page (mauvaise pratique) ou l'ajouter à chaque contrôleur, vous devez l'ajouter à un contrôleur de parent dans une méthode annotée avec @Before. Cela sera appelé sur chaque page afin que vous ne devez faire le code une fois.

Par exemple. Le contrôleur parent (aka Interceptor) ressemblerait à ceci:

public class ControllerInterceptor extends Controller {
   @Before
   public static void intercept() {
      RenderArgs.current().put("buildings", Building.findAll());
   }
}

Ensuite, chaque contrôleur ajouterait l'annotation suivante:

@With(ControllerInterceptor.class)
public class MyController extends Controller {
...
}

Et votre code de page alors reportez-vous à beaucoup que vous faites déjà:

<ul>
    #{list buildings, as: 'building'}
    <li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
    #{/list}
</ul>

Quant à savoir pourquoi votre code d'origine n'a pas fonctionné, je ne suis pas sûr. Peut-être quelque chose à voir avec la façon dont la classe modèle est renforcée par jeu?

Autres conseils

Découvert comment travailler autour d'elle, mais je serais toujours intéressé de savoir ce qui était erroné avec le code original. Je l'ai juste faire travailler par

<ul>
    #{list items: models.Building.findAll(), as: 'building'}
    <li>#{a @Buildings.edit(building.code)}${building}#{/a}</li>
    #{/list}
</ul>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top