我是否需要为每个表单创建一个类?

时间:2013-09-10 15:12:34

标签: playframework-2.0

事情就是这样:我是Play Framework(和ORM)的新手,所以我倾向于完全遵循教程告诉我/告诉我要做的事情。在Play的教程中,我们首先需要在控制器中创建一个子类,其中的变量名称与HTML表单中的相同。

例如,我会在HTML中使用此表单:

<form action="Controller1/action1">
  <input type="text" name="param1">
  <input type="text" name="param2">
  <input type="submit">
</form>

Controller1将如下所示:

public class Controller1 extends Controller {

    public static class SubClass1 {
        public String param1;
        public String param2;

        public String validate() {
          if (param1....param2...){
             return "invalid..."
          }
          return null;
        }
    }

    public static Result action0() {
       return ok(somePage.render(form(SubClass1.class)));
    }

    public static Result action1() {
       Form<SubClass1> form = form(SubClass1.class).bindFromRequest();
    }
}

Action0用于呈现页面并初始化它。 Action1用于接收表单数据并对其进行处理。我知道有时你可以这样做:form(User.class)和User是你模型中的一个类。

我的问题是:

  1. 我是否更愿意使用模型类(即form(User.class))来创建表单或使用如上所述在控制器中构建的子类? (我基本上知道我的表格数据是模型......)

  2. 我是否需要每次都传递一个表单对象,只要我想收到它?

  3. SubClass1中参数的命名约定是什么?参数名称应该与HTML表单中的名称完全相同吗?他们可以不同吗?我不使用form_helper来生成表单(我使用Foundation 4而不是Bootstrap),所以我只是将表单传递给页面而不是实际做任何事情。 (显示错误除外,或恢复value="@form("param1")"

  4. 等值
  5. 有人告诉我,在我调用validate()后,默认情况下会调用我的SubClass1中内置的form.hasErrors()。这是真的? Play如何知道应该执行哪个功能来检查数据的有效性? (“验证”是一个保留字吗?“验证”怎么样?)

  6. 谢谢:)

1 个答案:

答案 0 :(得分:0)

我的回答是:

  1. 否。在我的实践中,使用模型类作为表单模型大多数时候都是坏主意。这里的问题是在表单提交后“合并”数据。在现实生活中,你永远不会在模板上存储所有模型领域。如果您使用域类作为表单模型,那么在提交之后,您将有部分填充的域对象需要与数据库中的域对象合并。
  2. 如你所愿。我只是将FormSomeThingThatDescribesPageForm附加到域名类
  3. 抱歉,不熟悉java中的表单处理。