Playframework Play framework 2.x泛型
我有以下等级:Playframework Play framework 2.x泛型,playframework,template-engine,Playframework,Template Engine,我有以下等级: public class AbstractModel { 以及从上述类继承的类: public class Model1 extends AbstractModel { 及 现在,我想将上面的一个类实现util.List传输到框架模板引擎(来自Controller),但我不想知道列表中到底是哪个类。诸如此类: public static Result reloadTableData() { List<Model1> models = new ArrayLi
public class AbstractModel {
以及从上述类继承的类:
public class Model1 extends AbstractModel {
及
现在,我想将上面的一个类实现util.List传输到框架模板引擎(来自Controller),但我不想知道列表中到底是哪个类。诸如此类:
public static Result reloadTableData() {
List<Model1> models = new ArrayList<Model1>();
return ok(myTemplate.render(models));
}
这个构造将返回错误,我不知道如何编写正确的语法
同样在myTemplate中,我想区分这些类型(Model1和Model2)
我也不知道这个语法应该是什么样子:(
有人有这种问题吗?每个建议都会很满意。这里的问题是
java.util.List
不像Scala的List[T]那样是协变的
。这意味着,即使Model1
扩展了AbstractModel
,列表
不是列表
。因此,当它需要列表时,不能将列表
传递给渲染
我所知道的解决这个问题的唯一方法是有点丑陋。Java数组是协变的,因此您可以将列表
转换为数组
,这样就可以了
public static Result reloadTableData() {
List<Model1> models = new ArrayList<Model1>();
Model1[] arr = models.toArray(new Model1[models.size()]);
return ok(myTemplate.render(models));
}
公共静态结果重载TableData(){
列表模型=新的ArrayList();
Model1[]arr=models.toArray(新Model1[models.size()]);
返回ok(myTemplate.render(models));
}
示例视图:
@(models: Array[AbstractModel])
@for(model <- models) {
@if(model.isInstanceOf[Model1]) {
I'm an instance of Model1
}
@if(model.isInstanceOf[Model2]) {
I'm an instance of Model2
}
}
@(模型:数组[AbstractModel])
@for(模型类型不匹配;找到:java.util.List[models.AbstractModel]必需:java.util.List[models.User]当我从模板中删除所有调用时,我得到:错误:不兼容类型:列表无法转换为列表它不起作用错误说明:不兼容类型:列表在我将列表替换为表时无法转换为列表错误保持不变,但Model1出现调用问题[]Table在我看来,在template中,我应该使用与我提供的使用play java编译的示例相似的东西。我不认为play templates支持您想要的java泛型。使用play scala这可能会起作用,但除了转换为数组之外,我看不到使用java的方法。
public static Result reloadTableData() {
List<Model1> models = new ArrayList<Model1>();
Model1[] arr = models.toArray(new Model1[models.size()]);
return ok(myTemplate.render(models));
}
@(models: Array[AbstractModel])
@for(model <- models) {
@if(model.isInstanceOf[Model1]) {
I'm an instance of Model1
}
@if(model.isInstanceOf[Model2]) {
I'm an instance of Model2
}
}