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. 有人告诉我validate(),一旦我调用form.hasErrors(). 这是真的?Play 如何知道应该执行哪个函数来检查数据的有效性?(“validate”是保留字吗?“authenticate”呢?)

谢谢 :)

4

1 回答 1

0

我的回答是:

  1. 不。在我的实践中,大多数时候使用模型类作为表单模型是个坏主意。这里的问题是表单提交后“合并”数据。在现实生活中,您永远不会将模型的所有字段存储在表单上。如果您使用域类作为表单模型,那么在提交后,您将部分填充域对象,需要与数据库中的域对象合并。
  2. 是的
  3. 如你所愿。Form我只是将或附加SomeThingThatDescribesPageForm到域类名称
  4. 抱歉,对java中的表单处理不是很熟悉。
于 2013-09-11T04:15:50.183 回答