Как переопределить функцию CRUD / list ()? Играть! фреймворк - PullRequest
2 голосов
/ 20 октября 2011

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

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

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

CONTROLLER

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

MODEL

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

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

Template execution error

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

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

Ответы [ 3 ]

3 голосов
/ 20 октября 2011

Кажется, что вы переопределяете контроллер, но не шаблон.Сигнатура метода списка 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 () передает гораздо больше параметров, которые вы делаете, и, вероятно, онине являются обязательными.Попробуйте указать значения для них.

1 голос
/ 02 июня 2012

Вы можете переопределить метод списка 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;
    }
    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 голосов
/ 04 января 2013

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

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

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

...