用于创建具有复杂参数的ebean的表单

时间:2013-06-27 09:20:56

标签: java playframework playframework-2.0

我是Play的新手! 2框架现在我不能再帮助自己解决问题了。我有一个模型实体 B ,它有一些属性,如id,name和更复杂的属性 A ,具有@ManyToOne关系。 A 本身只有一些属性,如id和name。

有点抽象,但希望足够:

A

@Entity
public class A extends Model {
    @Id 
    public Long id,
    @Required
    public String name;

    ...

    public static void create(Exam exam) {
            exam.save();
    }
}

@Entity
public class B extends Model {
    @Id 
    public Long id,
    @Required
    public String name;
    @Required
    public A a;        

    ...

    public static void create(Exam exam) {
            exam.save();
    }
}

这两个模型的控制器非常简单,再次抽象:

public class BCtrl extends Controller {

    static Form<Exam> bForm = Form.form(B.class);

    public static Result bs() {
        return ok(views.html.b.render(B.all(), bForm));
    }

    public static Result newB() {
        Form<Exam> filledForm = bForm.bindFromRequest();
        List<Lecturer> lecturers = Lecturer.all();

        if (filledForm.hasErrors()) {
            return badRequest(views.html.b.render(Exam.all(), filledForm));
        }
        else {
            B.create(filledForm.get());
            return redirect(routes.BCtrl.bs());
        }
    }
}

这是我的问题。带有表单的Scala HTML文件,用于创建新的 B 。再次抽象:

@(bs: List[B], bForm: Form[B])

@import helper._
@import helper.twitterBootstrap._

@main("B") {
    <ul>
        @for(b <- bs) {
            <li>
                @b.name
            </li>
        }
    </ul>
    @helper.form(action = routes.ExamCtrl.newExam()) {
        @inputText(examForm("name"))
        @inputText(examForm("a"))
        <input type="submit" value="Create">
    }
}

每当我尝试创建新B时,我都会收到验证错误。创建与 A 关联的实体 B 的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

好的,明白了。通过

@inputText(examForm("a.id"))

我能够提供对象 A 的ID。使用带有所有可能的A选项的HTML select元素有助于选择正确的选项!