2013-03-14 113 views
0

我想做一个形式有一个模型和2个值总是相同,但有一个值发生变化。多种形式在一种形式的播放[2.0.4]

我的HTML形式是:

@helper.form(action = routes.TeacherController.putQuestionToAssignment(), 'class -> "form-horizontal") { 

      <input type="hidden" name="size" value="@{size}"> 
      <input type="hidden" name="assignment_id" value="@{assignment_id}"> 
      @for(question <- questions){ 
       <input type="checkbox" name="question_id" value="@{question.question_id}"> 
      } 
       <button type="submit" class="btn btn-primary" value="submit">create</button> 
    } 

我的模型:

@Entity 
public class Verkefnaspurningar extends Model { 
    @Id 
    public int verkefnaspurningar_id; 
    @Constraints.Required 
    public int assignment_id; 
    @Constraints.Required 
    public int question_id; 
    @Constraints.Required 
    public Double size; 

,并在控制器我要去尝试创建针对在选中复选框中的每一个问题的模型形式,但我不知道如何做到这一点,我可以在形式中的question_id字段上设置一个id,并通过该循环来循环?

public static Result putQuestionToAssignment(){ 
     Form<Verkefnaspurningar> verkefnaspurningarForm = form(Verkefnaspurningar.class).bindFromRequest(); 
      int question_id= verkefnaspurningarForm.get().question_id; 
      Double size= verkefnaspurningarForm.get().size; 
      int assignmentId= verkefnaspurningarForm.get().assignment_id; 
      Verkefnaspurningar verkefnaspurningar = Verkefnaspurningar.create(assignmentId, question_id, size); 

     return redirect(routes.TeacherController.createAssignment()); 
    } 

希望这篇文章不是愚蠢的,我的第一个,并以亲切的问候Björn。

回答

0

这是我对你的问题的解决方案的想法。但是,我使用Play!Framework 2.1.0来测试此解决方案。

在你控制器,你可以得到这样的提交用户选中question_id值:

public static Result putQuestionToAssignment() { 
    // get all HTTP request value from submitted form 
    Map<String, String[]> map = request().body().asFormUrlEncoded(); 
    String[] allCheckedData = map.get("question_id"); // get all checked question 
    ... // bind the rest of request parameter to variable if needed 

    Verkefnaspurningar verkefnaspurningar; 
    // Loop for each checked question 
    for (String t : allCheckedData) { 
     Logger.info("Checked data is " + t); 
     verkefnaspurningar = new Verkefnaspurningar(); // create each data 
     ... // put the rest of code for saving the model 
    } 

    return TODO; // still dummy. Should be redirect! 
} 

请注意,我不是在这个解决方案中使用Form。我使用request().body().asFormUrlEncoded()从提交的表单中获取所有请求参数。检查文件RequestBodyhere

+0

不错,谢谢你,“request()。body()。asFormUrlEncoded()”正是我所需要的:) – bjozzi 2013-03-16 12:53:00

+0

请接受这个答案,如果它对你有用,点击这个答案上的勾号.. :) – 2013-03-18 14:32:35

0

我会为此使用DynamicForm。这将是这样的:

public static Result putQuestionToAssignment(){ 

     DynamicForm form = form().bindFromRequest(); 

     Set<Long> ids = new HashSet<Long>(); 
     for (Entry<String, String> entry : form.data().entrySet()) { 
       ids.add(Long.valueOf(entry.getValue())); 
     } 

     Verkefnaspurningar verkefnaspurningar; 
     for (Long id : ids) { 
       verkefnaspurningar = Verkefnaspurningar.create(assignmentId, id, ids.size()); 
     } 
     return redirect(routes.TeacherController.createAssignment()); 
} 

要获得assignmentId,您可能需要添加一个条件遍历form.data().entrySet()时:如果entry.getKey()如果您分配的一个,那么店铺ID,其他增值设置。