2011-10-19 4 views
2

J'essaye de surcharger la fonction list() du module CRUD pour un de mes modèles.Comment remplacer la fonction CRUD/list()? Jouer! framework

J'ai trouvé this sur Google Groupes, ce qui est essentiellement le problème que je rencontre.

Fondamentalement, je veux filtrer la liste en fonction des catégories certian, j'ai essayé ceci:

CONTRÔLEUR

public static void list(string category){ 
    List<Duty> object = Duty.getByCategory(category); 
    render(object); 
} 

MODÈLE

public static List<Duty> getByCategory(String category){ 
    List<Duty> result = Duty.find("select distinct d from Duty d join " + 
     "d.category c where c.name = ? order by d.name", category).fetch(); 
    return result; 
} 

Je reçois l'erreur suivante:

Template execution error

Comment écraser l'action de liste?

Toute aide sera grandement appréciée.

Répondre

3

Il semble que vous remplaciez le contrôleur mais pas le modèle. La signature de la méthode de la liste CRUD est this one, un peu différent que le vôtre:

public static void list(int page, String search, String searchFields, String orderBy, String order) { 
     ObjectType type = ObjectType.get(getControllerClass()); 
     notFoundIfNull(type); 
     if (page < 1) { 
      page = 1; 
     } 
     List<Model> objects = type.findPage(page, search, searchFields, orderBy, order, (String) request.args.get("where")); 
     Long count = type.count(search, searchFields, (String) request.args.get("where")); 
     Long totalCount = type.count(null, null, (String) request.args.get("where")); 
     try { 
      render(type, objects, count, totalCount, page, orderBy, order); 
     } catch (TemplateNotFoundException e) { 
      render("CRUD/list.html", type, objects, count, totalCount, page, orderBy, order); 
     } 
    } 

Vous remarquerez que render() passe beaucoup plus de paramètres que vous faites, et probablement ils ne sont pas en option. Essayez de fournir des valeurs pour eux.

1

Vous pouvez remplacer la méthode de la liste CRUD, et ajouter des filtres qui passent beaucoup de paramètres dans par exemple:

public static void list(int page, String search, String searchFields, String orderBy, String order) { 
    ObjectType type = ObjectType.get(getControllerClass()); 
    notFoundIfNull(type); 
    if (page < 1) { 
     page = 1; 
    } 
    String where = "nameAttribute =" + value; 

    List<Model> objects = type.findPage(page, search, searchFields, orderBy, order, where); 
    Long count = type.count(search, searchFields, where); 
    Long totalCount = type.count(null, null, where); 
    try { 
     render(type, objects, count, totalCount, page, orderBy, order); 
    } catch (TemplateNotFoundException e) { 
     render("CRUD/list.html", type, objects, count, totalCount, page, orderBy, order); 
    } 
} 
0

Essayez d'appeler cette méthode de remplacement de view(xtml).

<form action="@{Controler.overrideList()}" method="POST"> 

et utiliser le code précédent, et ajouter de nombreux paramètres qui passent les filtres à where = "..."