在Play 2.0中进行表单验证

时间:2012-03-29 14:10:54

标签: forms model-view-controller model playframework

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

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

@Entity  
public class Question extends Model {
     @Id @Required public int id;
     public String title;
     public String body;
     ...methods...
}

所以我想将此作为表单的模板供用户创建问题,因此我创建了一个静态实例(就像他们在样本中所做的那样)

 final static Form<Question> question_form = form(Question.class);

到目前为止一切都那么好,一切都在编译。当我实际提交表单时出现问题:

 Form<Question> filled_form = new Form<Question>(Question.class).bindFromRequest();

我收到错误:

 [UnexpectedTypeException: No validator could be found for type: java.lang.Integer]

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

1。)专门为Forms创建模板类,不包括外键,ID和不是为用户设计的格式的信息。 (即如果QuestionTopic的外键,则QuestionForm类会有String topic字段。

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

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

这是一种合理的方式吗?或者有更好的方法吗?

更新:

使用@GeneratedValue注释而不是@Required注释时似乎已修复,但我仍然对我提出的表单设计模式感到好奇。

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

1 个答案:

答案 0 :(得分:1)

id字段不需要任何验证,ORM会关心它。当然你不应该把id放在表格中(它根本不应该被编辑 - 它是常见的AUTO_INCREMENT)并且最好使它变长,只是:

@Id
public Long id;