0

我正在尝试制作一种具有一个模型和两个值的表单,这些值始终相同,但有一个值会发生变化。

我的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 表示亲切的问候。

4

2 回答 2

1

这是我解决您问题的想法。但是,我使用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()RequestBody 在此处查看文档。

于 2013-03-14T16:04:31.213 回答
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,否则将值添加到 Set。

于 2013-03-14T16:15:39.393 回答