Forms Play 2.0中的表单验证

Forms Play 2.0中的表单验证,forms,model-view-controller,model,playframework,Forms,Model View Controller,Model,Playframework,好的,所以我在从表单获取数据以绑定到我拥有的模型类时遇到了一些问题 我有一个课堂问题,基本上是这样的: @Entity public class Question extends Model { @Id @Required public int id; public String title; public String body; ...methods... } 所以我想用它作为表单的模板,让用户创建一个问题,所以我创建了一个静态实例(就像他们在示

好的,所以我在从表单获取数据以绑定到我拥有的模型类时遇到了一些问题

我有一个课堂问题,基本上是这样的:

@Entity  
public class Question extends Model {
     @Id @Required public int id;
     public String title;
     public String body;
     ...methods...
}
所以我想用它作为表单的模板,让用户创建一个问题,所以我创建了一个静态实例(就像他们在示例中所做的那样)

我对如何进行的思考是使用如下设计模式:

@Entity  
public class Question extends Model {
     @Id @Required public int id;
     public String title;
     public String body;
     ...methods...
}
1.)专门为表单创建模板类,其中不包括外键、ID和非为用户设计的格式的信息。(即,如果
问题
主题
的外键,
问题表单
类将有一个
字符串主题
字段

2.)在
Question
模型中创建类似
getFormForQuestion(Question)
getQuestionForForm(Form)
的方法,然后使用这些方法执行CRUD函数

因此,基本上用户和控制器使用表单进行交互,然后模型知道如何获取这些表单并将它们转换为数据库中的条目

这样做是否合理?还是有更好的方法

更新:

当使用
@GeneratedValue
注释而不是
@必需的
注释时,似乎是固定的,但我仍然对我建议的表单设计模式感到好奇


另外,只需删除
@Required
即可解决问题。仍在寻找对上述设计模式的评论

id字段不需要任何验证,ORM会关心它。当然,您不应该在表单中放置id(它根本不应该被编辑-它是常见的自动增量),最好将其设置为长,只需:

@Id
public Long id;

您不需要
id
,因为它是从
模型
超类继承而来的。哦,太棒了,我想这会更好。谢谢这能解决你的问题吗?我应该把它作为这个问题的答案吗?是的,这似乎也很有效,可能是正确的解决方案,而不是使用
@GeneratedValue
注释,你认为我提到的设计模式有好的设计模式吗?对我提到的设计模式有什么评论吗?@weezybizzle我不确定我是否理解得很好,但如果没有声明此字段,则Ebean不会创建任何ID字段…:)这在大多数情况下都是无用的。好吧,我将分别发布这个设计模式。
 [UnexpectedTypeException: No validator could be found for type: java.lang.Integer]
@Id
public Long id;