OneToMany关系和使用Play框架保存表单

时间:2013-10-04 20:39:26

标签: java model playframework

我是Play Framework的初学者,在将表格数据保存到两个不同的表格时遇到了一些困难。

当我提交表单时,firstName,lastName和text保存到数据库但我似乎无法找出为什么schoolName不会保存到学校表中。我花了很多时间观看教程并浏览其他人的示例代码并且没有看到解决方案。如果有人可以帮助我,我会非常感激。

这就是我所拥有的:

候选人模特:

package models;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import play.db.ebean.Model;

@Entity 
public class Candidate extends Model {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    public String firstName;

    public String lastName;

    public boolean sponsorshipStatus;

    public boolean proceedToInterview;

    public String text;

    @OneToMany(mappedBy="candidate", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private List<School> schools = new ArrayList<School>();

    /**
     * Generic query helper for entity Candidate with id Long
     */
    public static Model.Finder<Long, Candidate> find = new Model.Finder<Long, Candidate>(
            Long.class, Candidate.class);


}

学校模式:

package models;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import play.db.ebean.Model;

@Entity 
public class School extends Model {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    public String schoolName;

    @ManyToOne(cascade=CascadeType.ALL)
    public Candidate candidate = new Candidate();




    /**
     * Generic query helper for entity Company with id Long
     */
    public static Model.Finder<Long, School> find = new Model.Finder<Long, School>(
            Long.class, School.class);

}

表单模板:

@(candidateForm: Form[Candidate])

@import helper._

@main("Create Candidate"){

    <h1>Add a Candidate</h1>

    @form(routes.Application.save()) {

        <fieldset>
        ${candidateForm("firstName")}
            @inputText(candidateForm("firstName"), '_label -> "First Name")
            @inputText(candidateForm("lastName"), '_label -> "Last Name")
            @inputText(candidateForm("text"), '_label -> "Text")
            @inputText(candidateForm("schoolName"), '_label -> "School")




        </fieldset>

        <div class="actions">
            <input type="submit" value="Create this computer" class="btn primary"> or 
            <a href="" class="btn">Cancel</a> 
        </div>
    }
}

控制器:

package controllers;

import static play.data.Form.form;
import models.Candidate;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.createForm;
import views.html.index;

public class Application extends Controller {

    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }

    /**
     * Display the 'new candidate form'.
     */
    public static Result create() {
        Form<Candidate> candidateForm = form(Candidate.class);
        return ok(views.html.createForm.render(candidateForm));
    }

    /**
     * Handle the 'new computer form' submission 
     */
    public static Result save() {
        Form<Candidate> candidateForm = form(Candidate.class).bindFromRequest();
        if(candidateForm.hasErrors()) {
            return badRequest(createForm.render(candidateForm));
        }
        candidateForm.get().save();
        flash("success", "Computer " + candidateForm.get().firstName + " has been created");
        return redirect("/candidates/new");
    }

3 个答案:

答案 0 :(得分:0)

一些事情:

为什么学校名单是私密的?我不认为这会改变一些事情,但值得一看。

它可能不是保存因为它是一个集合而你没有为程序提供任何方向来查找现有的学校(并传递id,我认为该字段被称为schools.id)并将其添加到集合或创建一个新学校,然后将其添加到模型表,然后再添加到集合。我主要在play 1.x工作,你的似乎是2.x所以我不熟悉模板语法,但如果你在play 1.x教程中查找,我记得有一个关于如何处理关系的例子和表格。

从火车站写这个,所以无法查找链接,但希望这能让你朝着正确的方向前进。

答案 1 :(得分:0)

候选人表格。得到()保存()。保存方法在哪里。检查你的控制器,可能你也有语法错误。检查编译时错误。

答案 2 :(得分:0)

你的表格有这个:

@inputText(candidateForm(“schoolName”),'_ label - &gt;“学校”)

但Candidate类没有shoolName属性。看看Play附带的计算机数据库示例。他们有一个计算机表格,其中包括公司名称列表。应该对你有帮助。