2015-12-13 4 views
0

Я покажу вам код. Это скажет больше, чем слова.generic controller - play framework

BaseModel:

import com.avaje.ebean.ExpressionList; 
import com.avaje.ebean.Model; 

import javax.persistence.Id; 
import javax.persistence.MappedSuperclass; 

@MappedSuperclass 
public abstract class BaseModel extends Model { 
@Id 
public Long id; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public static <T extends Model> ExpressionList<T> find() { 
    return null; 
} 
} 

BaseController:

import com.avaje.ebean.ExpressionList; 
import models.BaseModel; 
import play.db.ebean.Model; 
import play.libs.Json; 
import play.mvc.Controller; 

import javax.xml.transform.Result; 

public class BaseController<T extends BaseModel> extends Controller { 

private Model.Finder<Long,T> finder; 

public Result GetAll() { 


    List<T> list = T.find().where().orderBy("name asc").findList(); 

    if (request().accepts("text/html")) { 
     return ok(index.render(list)); 
    } else{ 
     return badRequest(); 
    } 


    if (request().accepts("application/json")) { 
     return ok(Json.toJson(list)); 
    } else { 
     return badRequest(); 
    } 
} 

У меня есть проблема со списком

List<T> data = T.find().where().orderBy("buildingTypeId asc").findList(); 

Требуется List <T>
Найдено List<com.avaje.ebean.Model>

+0

Хотя в некоторых случаях код может говорить больше, чем слова, в этом случае некоторые слова объяснения были бы полезны (например, сообщение об ошибке или исключение). – hotzst

ответ

0

Проблема в коде List<T> list = T.find().where().orderBy("name asc").findList(); Метод findList() не может вернуть List<T>, потому что он не знает соответствующий тип T. Это знает только класс BaseController.

Я пробовал: List<T> list = finder.where().orderBy("name asc").findList(); и он работает, может быть, это то, что вам нужно.