Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在PlayFramework中自定义CRUD list.html_Java_Crud_Playframework - Fatal编程技术网

Java 在PlayFramework中自定义CRUD list.html

Java 在PlayFramework中自定义CRUD list.html,java,crud,playframework,Java,Crud,Playframework,你好 我正在尝试为play应用程序的CRUD部分自定义list.html视图 我的模型是这样的 我有一个对象与另一个对象的关系如下: @Entity public class MyObjectA extends Model { @Required public String myObjectAName; ... @Required @ManyToOne public MyObjectB myObjectB; } 现在我在list.html中

你好 我正在尝试为play应用程序的CRUD部分自定义list.html视图

我的模型是这样的

我有一个对象与另一个对象的关系如下:

@Entity
public class MyObjectA extends Model {

    @Required
    public String myObjectAName;

    ...

    @Required
    @ManyToOne
    public MyObjectB myObjectB;
}
现在我在list.html中看到了这个

<div id="crudListTable">
    #{crud.table fields:['myObjectB', 'myObjectAName'] /}
</div>

#{crud.table字段:['myObjectB','myObjectAName']/}
现在,在浏览器中调用以下url时,执行此代码将显示如下内容

myObjectB\uumyObjectAName

MyObjectB[1]\uu嘿,这是myObjectAName的名称
MyObjectB[2]\uu嘿,这是myObjectAName的另一个名称

请注意在[]中为MyObjectB使用了对象名和对象id

因此,为了在上面的列表中显示MyObjectB的myObjectBName属性,我尝试以下方法:

<div id="crudListTable">
    #{crud.table fields:['myObjectB.myObjectBName', 'myObjectAName'] /}
</div>

#{crud.table字段:['myObjectB.myObjectBName','myObjectAName']/}
但是我得到了这个错误

模板{module:crud}/app/views/tags/crud/table.html中发生执行错误。>引发的异常丢失了类models.MyObjectA的PropertyException:没有此类属性:myObjectB.myObjectBName>

当然,MyObjectB有一个公共属性myObjectBName


那么我在这里做错了什么呢?

它不起作用,因为
字段
参数只获取要显示的类的字段名列表(这里
MyObjectA
),而
“myObjectB.myObjectBName”
不是
MyObjectA
中的字段名

有两种方法可以做到这一点:

简单的解决方案是重写
MyObjectB
toString()
方法。这样做的缺点是,每次显示
MyObjectB
时都使用相同的字符串,这可能不是您想要的

例如:

public class MyObjectB extends Model {

  // ...

  @Override
  public String toString(() {
    return this.myObjectBName;
  }

}
#{crud.table fields:['myObjectB', 'myObjectAName']}
   #{crud.custom 'myObjectB'}
       ${object.myObjectB.myObjectBName}
   #{/crud.custom}
#{/crud.table}
列表特定的解决方案是使用

例如:

public class MyObjectB extends Model {

  // ...

  @Override
  public String toString(() {
    return this.myObjectBName;
  }

}
#{crud.table fields:['myObjectB', 'myObjectAName']}
   #{crud.custom 'myObjectB'}
       ${object.myObjectB.myObjectBName}
   #{/crud.custom}
#{/crud.table}

谢谢你,罗托拉!crud.custom标签正是我所需要的