玩! Framework 2.X,表单处理

时间:2013-11-15 07:25:53

标签: forms object playframework

我是玩游戏的新手!框架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),其中包含所有字段设置的作业(字符串作业标题以及公司对象)。这一定是一个愚蠢的问题,我为此道歉。任何帮助将不胜感激

非常感谢

2 个答案:

答案 0 :(得分:0)

如果要将表单直接绑定到对象中,则不能使用@inputText(companyForm("name")),而是可以使用select表单帮助程序来选择公司,请检查ie。 computer-database示例这是非常相似的案例......

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

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

}

答案 1 :(得分:0)

好的,我回答了我自己的问题,因为我不能清楚地解释我的问题。 为简单起见:我需要从表单中设置Company对象。找到我的解决方案 希望它会对你有所帮助。

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">     
}