Как переопределить функцию CRUD/list()? Играть в! рамки

Я пытаюсь переопределить функцию list() модуля CRUD для одной из моих моделей.

Я нашел это в группах Google, что по сути является проблемой у меня есть.

В основном я хочу отфильтровать список на основе определенных категорий, я пробовал это:

КОНТРОЛЛЕР

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

МОДЕЛЬ

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

Я получаю следующую ошибку:

Ошибка выполнения шаблона

Как перезаписать действие списка?

Любая помощь будет высоко ценится.


person Martinffx    schedule 19.10.2011    source источник


Ответы (3)


Кажется, вы переопределяете контроллер, но не шаблон. Подпись метода списка CRUD: эта один, немного отличающийся от вашего:

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);
        }
    }

Вы заметите, что render() передает гораздо больше параметров, чем вы, и, вероятно, они не являются необязательными. Попробуйте указать для них значения.

person Pere Villega    schedule 20.10.2011

Вы можете переопределить метод списка CRUD и добавить фильтры, передающие множество параметров в where, например:

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);
    }
}
person eluish192    schedule 01.06.2012

Попробуйте вызвать этот метод переопределения из view(xtml).

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

И используйте предыдущий код и добавьте фильтры, передающие множество параметров в where = "..."

person Milos Lazic    schedule 04.01.2013