Почему мой вложенный POJO возвращает ноль из формы в Play!1.x - PullRequest
0 голосов
/ 04 декабря 2018

В игре!Framework 1.5.1, почему я получаю нулевое значение для thingy.Owner?Разве автоматическая привязка не должна позаботиться об этом?

Класс пользователя

    package models;

@Entity
@Table(name="objtest_user")
public class User extends Model
{
    @Required
    public String username;

    @Password
    @Required
    public String password;

    public String fullname;

    public User(String username, String password, String fullname)
    {
        this.username = username;
        this.password = password;
        this.fullname = fullname;
    }

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

и этот класс Thingy, который ссылается на класс пользователя

    package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Thingy extends Model
{
    @Required
    public String Name;

    @ManyToOne
    public User Owner;

    public Thingy(String name, User owner)
    {
        this.Name = name;
        this.Owner = owner;
    }

    @Override
    public String toString()
    {
        return Name;
    }
}

и эту форму шаблона.

#{extends 'main.html' /}
#{set title:'Home' /}

<p>Current user = ${currentUser}</p>


#{form @saveThingy(), id:'saveThingy'}
    <input type="text" id="thingy.Name" name="thingy.Name"/>
    <input type="hidden" id="thingy.Owner" name="thingy.Owner" value="${currentUser}"/>
    <input type="submit" id="Save" value="Save"/>
#{/form}

Метод контроллера

public static void saveThingy(Thingy thingy)
{
    System.out.println("Name = " + thingy.Name);
    System.out.println("Owner = " + thingy.Owner);

    thingy.save();
}

1 Ответ

0 голосов
/ 04 декабря 2018

Попробуйте изменить следующую строку

<input type="hidden" id="thingy.Owner" name="thingy.Owner" value="${currentUser}"/>

На

<input type="hidden" id="thingy.Owner" name="thingy.Owner.id" value="${currentUser.id}"/>

Если вы посмотрите документы (https://www.playframework.com/documentation/1.2.x/controllers#params), и поищите секцию привязки объекта JPA, она говорито том, что для подчиненных объектов требуется идентификатор. Воспроизведение, когда он находит идентификатор для объекта, загружает соответствующий объект через JPA / Hibernate.

...