Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 无法显示模板中关系的数据_Java_Playframework_Twirl - Fatal编程技术网

Java 无法显示模板中关系的数据

Java 无法显示模板中关系的数据,java,playframework,twirl,Java,Playframework,Twirl,我一直在尝试在Twirl模板中显示一对一关系的数据(使用Play Framework Java-2.5.10)。基本上我有一个用户模型: package models; import java.sql.Date; import javax.persistence.*; import com.avaje.ebean.Model; @Entity @Table(name = "users") public class User extends Model { @Id @Colum

我一直在尝试在Twirl模板中显示一对一关系的数据(使用Play Framework Java-2.5.10)。基本上我有一个用户模型:

package models;

import java.sql.Date;
import javax.persistence.*;
import com.avaje.ebean.Model;

@Entity
@Table(name = "users")
public class User extends Model {
    @Id
    @Column(name = "id")
    public Long id;

    @Column(name = "first_name")
    public String firstName;

    @Column(name = "middle_name")
    public String middleName;

    @Column(name = "last_name")
    public String lastName;

    @Column(name = "date_of_birth")
    public Date dateOfBirth;

    @Column(name = "sex")
    public String sex;

    @OneToOne
    @JoinColumn(name = "time_zone_id")
    public TimeZone timeZone;

    public static Finder<Long, User> find = new Finder<>(User.class);
}
现在,这为我获得了正确的农民数据,但是当我试图通过用户模型显示名称时,我得到了null。更具体地说,编写此代码会导致空值(实际上,我得到的是
nullnull
):

@(farmer.user.firstName+farmer.user.lastName)

我遗漏了什么?

正如评论中所讨论的,这是因为play enhancer根本不适用于视图或任何Scala代码。由于Twirl将
scala.html
code编译为scala代码,因此增强器不会触及此编译代码

然后,解决方案是手动为关系创建get:

public class Farmer extends Model {

    public User getUser() {
        return this.user;
    }

}
这是Java代码,然后将按预期进行处理。当然,您必须更改视图以使用
farmer.getUser
而不是
farm.user



此外,正如文档中所述,字节码增强涉及到一些魔术。但是您可以完全避免它,只使用常规POJO(使用显式声明的GET和sets)。

您使用的是什么?如果我没记错的话,模型增强器不适用于视图。因此,在您的
Farmer
模型中,您必须创建一个
getUser
方法,然后调整视图以使用它。@marcospereira-Hmm,谢谢。我确实在使用增强器插件。而我可以通过将示例更改为
return Farmer.find.fetch(“用户”).where().eq(“status”,status.ACTIVE.name()).findList(),使其发挥作用我不认为我可以继续这样做来穿越长长的关系链。但是,我没有从视图调用函数,我希望它能像
@farmer.getUser().firstName()一样简单。
@marcospereira谢谢,这很有效!你能在下面加上这个作为答案,这样我就可以接受了吗?:-)(顺便说一句,我讨厌这个增强插件——它在文档中被吹捧为魔术,但就像魔术一样,它不起作用)。
public class FarmerController extends Controller {
    public Result all() {
        return ok(farmers.render(Farmer.getAllActive()));
    }
    public Result farmer(Long id, String url) {
        return ok(farmer.render());
    }
}
<div><h4>@(farmer.user.firstName + farmer.user.lastName)</h4></div>
public class Farmer extends Model {

    public User getUser() {
        return this.user;
    }

}