【问题标题】:Customizing CRUD list.html in PlayFramework在 PlayFramework 中自定义 CRUD list.html
【发布时间】:2011-05-04 05:17:27
【问题描述】:

你好 我正在尝试为播放应用程序的 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>

现在,当在浏览器中调用以下 url http://myplayapp/admin/myObjectAs 时,执行此代码将显示类似这样的内容

myObjectB __ myObjectAName

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

注意我的 MyObjectB 在 [] 中使用的对象名称和对象 ID。

所以要在上面的列表中显示 MyObjectB 的 myObjectBName 属性,我试试这个:

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

然后我得到这个错误

模板 {module:crud}/app/views/tags/crud/table.html 中出现执行错误。 >引发的异常是 MissingPropertyException:没有这样的属性:myObjectB.myObjectBName >for 类:models.MyObjectA。

当然 MyObjectB 有一个公共属性 myObjectBName

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

【问题讨论】:

    标签: java crud playframework


    【解决方案1】:

    它不起作用,因为fields 参数只需要一个要显示的类的字段名称列表(这里是MyObjectA),而"myObjectB.myObjectBName" 不是MyObjectA 中的字段名称。

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

    简单的解决方案是覆盖MyObjectBtoString() 方法。这有一个缺点,即每次显示 MyObjectB 时都使用相同的字符串,这可能不是您想要的。

    例子:

    public class MyObjectB extends Model {
    
      // ...
    
      @Override
      public String toString(() {
        return this.myObjectBName;
      }
    
    }
    

    列表特定的解决方案是使用crud.custom tag

    例子:

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

    【讨论】:

    • 谢谢 RoToRa! crud.custom 标签正是我所需要的
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多