0

我是使用 Play 的新手!框架 2.X 并有一个简单的问题。如何向我的方法 Job.create(filledJob) 发送一个完整设置的 Job 对象?这意味着包含在 Job 对象中的 Company 对象也被填充。

我有以下内容:

public class Job {  
    public String title;
    public Company company;
 }

public class Company {
     public String name;
     public String email;   
}

我的模板中有一个表格,其中包含一个职位信息部分和一个公司部分

@(jobForm: Form[Job], companyForm: Form[Company])
@form(routes.Application.newJob()) {      
    @inputText(jobForm("title"))             
    @inputText(companyForm("name"))                       
    <input type="submit" value="Create">     
}

我的控制器(Application.java)看起来像这样:

  public class Application extends Controller {

    static Form<Job> jobForm = form(Job.class); 
    static Form<Company> companyForm = form(Company.class);

    public static Result index() {
       return ok(
         views.html.index.render(jobForm, companyForm)
      );
    }

    public static Result newJob() {
       Form<Job> filledForm = jobForm.bindFromRequest();
       Job.create(filledForm.get());
       return redirect(routes.Application.index()); 
    }
}

理想情况下,我想发送到我的方法 Job.create(job),其中设置了所有字段的作业(字符串职位以及公司对象)。这一定是一个笨拙的问题,我为此道歉。任何帮助将不胜感激

非常感谢

4

2 回答 2

0

好的,我正在回答我自己的问题,因为我一定没有清楚地解释我的问题。为了简单起见:我需要从表单中设置公司对象。在下面找到我的解决方案希望它会对您有所帮助。

public class Job {  
    public String title;
    @Valid
    public Company company;
}

public class Company {
     public String name;
     public String email;   
}

@(jobForm: Form[Job], companyForm: Form[Company])
  @form(routes.Application.newJob()) {      
  @inputText(jobForm("title"))             
  @inputText(jobForm("company.name"))                       
 <input type="submit" value="Create">     
}
于 2013-11-18T06:15:14.870 回答
0

如果要将表单直接绑定到对象中,则不能@inputText(companyForm("name"))使用,但可以使用select表单助手来选择公司,检查 ie。computer-database示例它非常相似的情况......

另一方面,如果您有很多公司并且不想创建庞大的公司,请考虑另一种情况:只需使用select类似路由的方式,换句话说,您将发送一个表单并从请求中绑定它+另外将通过 id 获取公司在路由参数中,并将添加到对象,伪代码:/job/new/company/:companyId/add-job

public static Result addJobToCompany(Integer companyId){

    Job job = form(Job.class).bindFromRequest().get();
    job.company = Company.find.byId(companyId);
    job.save();

    return redirect(routes.Application.jobDetails(job.id));

}
于 2013-11-15T19:50:00.723 回答