Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Play框架的OneToMany关系和表单保存_Java_Model_Playframework - Fatal编程技术网

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

Java 使用Play框架的OneToMany关系和表单保存,java,model,playframework,Java,Model,Playframework,我是Play框架的初学者,在将表单数据保存到两个不同的表时遇到一些困难 当我提交表单时,firstName、lastName和text都会保存到数据库中,但我似乎无法找到为什么schoolName不会保存到schools表中。我花了相当多的时间看教程和阅读其他人的示例代码,但还没有看到解决方案。如果有人能帮我,我会非常感激 以下是我所拥有的: 候选模型: package models; import java.util.ArrayList; import java.util.List; im

我是Play框架的初学者,在将表单数据保存到两个不同的表时遇到一些困难

当我提交表单时,firstName、lastName和text都会保存到数据库中,但我似乎无法找到为什么schoolName不会保存到schools表中。我花了相当多的时间看教程和阅读其他人的示例代码,但还没有看到解决方案。如果有人能帮我,我会非常感激

以下是我所拥有的:

候选模型:

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);


}
封装模型;
导入java.util.ArrayList;
导入java.util.List;
导入javax.persistence.CascadeType;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入play.db.ebean.Model;
@实体
公共类候选扩展模型{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
公共长id;
公共字符串名;
公共字符串lastName;
公共赞助地位;
公共布尔过程交互;
公共字符串文本;
@OneToMany(mappedBy=“candidate”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
私立学校列表=新建ArrayList();
/**
*id为Long的实体候选的通用查询帮助程序
*/
public static Model.Finder=new Model.Finder(
长类,候选人类);
}
学校模式:

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);

}
封装模型;
导入javax.persistence.CascadeType;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.manytone;
导入play.db.ebean.Model;
@实体
公营学校扩展模式{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
公共长id;
公共字符串学名;
@多通(级联=级联类型.ALL)
公开候选人=新候选人();
/**
*id为Long的实体公司的通用查询帮助程序
*/
public static Model.Finder=new Model.Finder(
长时间上课,学校上课);
}
表单模板:

@(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>
    }
}
@(候选表格:表格[候选人])
@导入助手_
@主(“创建候选对象”){
添加候选人
@表单(routes.Application.save()){
${candidateForm(“firstName”)}
@输入文本(候选表格(“名字”),“_标签->名字”)
@输入文本(候选表格(“姓氏”),“_标签->姓氏”)
@输入文本(候选格式(“文本”),“_标签->文本”)
@输入文本(候选表格(“学校名称”),“_标签->学校”)
或
}
}
控制器:

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");
    }
包控制器;
导入静态play.data.Form.Form;
导入模型。候选者;
导入play.data.Form;
导入play.mvc.Controller;
导入play.mvc.Result;
导入views.html.createForm;
导入views.html.index;
公共类应用程序扩展控制器{
公共静态结果索引(){
返回ok(index.render(“新应用程序准备就绪”);
}
/**
*显示“新候选人表格”。
*/
公共静态结果创建(){
表格candidateForm=表格(Candidate.class);
返回ok(views.html.createForm.render(candidateForm));
}
/**
*处理“新电脑表格”提交
*/
公共静态结果保存(){
Form candidateForm=Form(Candidate.class).bindFromRequest();
if(candidateForm.hasErrors()){
返回badRequest(createForm.render(candidateForm));
}
candidateForm.get().save();
flash(“成功”,“计算机”+candidateForm.get().firstName+“已创建”);
返回重定向(“/candidates/new”);
}
有几件事:

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

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

从火车站写这篇文章,因此无法查找链接,但希望这能让您找到正确的方向。

候选表单。get().save();save method在哪里。检查控制器,可能您也有语法错误。检查编译时错误。

您的表单有以下内容:

@输入文本(候选表格(“学校名称”),“_标签->学校”)

但是候选类没有shoolName属性。请查看Play附带的计算机数据库示例。它们有一个包含公司名称列表的计算机表单。应该对您有所帮助