0

1 つのモデルと常に同じ 2 つの値を持つフォームを実行しようとしていますが、変化する値が 1 つあります。

私の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());
    }

この投稿がばかげていないことを願っています, 私の最初の投稿, 敬具ビョルン.

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 hereのドキュメントを確認してください。

于 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、ループするときに条件を追加する必要がある場合があります。割り当ての 1 つである場合は ID を保存し、そうでない場合は Set に値を追加しますform.data().entrySet()entry.getKey()

于 2013-03-14T16:15:39.393 に答える