为啥我的嵌套 POJO 从 Play 中的表单返回 null! 1.x
Posted
技术标签:
【中文标题】为啥我的嵌套 POJO 从 Play 中的表单返回 null! 1.x【英文标题】:Why does my nested POJO return null from a form in Play! 1.x为什么我的嵌套 POJO 从 Play 中的表单返回 null! 1.x 【发布时间】:2018-12-04 10:01:13 【问题描述】:在游戏中!框架 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;
还有这个引用 User 类的 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();
【问题讨论】:
哦,根据我在表单上的测试渲染,currentUser 已正确填充。要设置的代码是 public static void index() User currentUser = User.findById(1L); System.out.println("控制器当前用户" + currentUser); renderArgs.put("currentUser", currentUser);使成为(); 【参考方案1】:尝试更改以下行
<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 对象绑定部分,它谈到了要求子对象具有 id。当它找到一个对象的 ID 时播放,它将通过 JPA/Hibernate 加载相关实体。
【讨论】:
是的,这行得通 - 非常感谢。几乎每场比赛!我曾经问过的问题已经被你解决了。图例。以上是关于为啥我的嵌套 POJO 从 Play 中的表单返回 null! 1.x的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Play 框架中的 YAML 固定装置加载(静态嵌套)枚举值?
@RequestParam 从邮递员的表单数据中传递 Spring Boot 中的 pojo 字段