2

Play Framework(java)でフォームを検証していますが、送信後にフォームの値にコンマが追加されています。

フォームは次のとおりです。

#{form @doCreate()}
    <input type="text" name="session.sessionName" value="${flash['session.sessionName']}"/>
    <input type="text" name="session.jumpDate"value="${flash['session.jumpDate']}"/>
    <select id="jumpers" multiple="multiple" name="jumpers[]" title="Click to Select a Jumper">
        ..several options here
   </select>
#{/form}

フォームハンドラは次のとおりです。

public static void doCreate(JumpSession session, String[] jumpers) {

    validation.required(session.getSessionName()).message("sessionName.required");
    validation.required(session.getJumpDate()).message("jumpDate.required");
    validation.required(jumpers).message("jumpers.required");


    if (validation.hasErrors()) {
        params.flash(); // add http parameters to the flash scope
        validation.keep(); // keep the errors for the next request
        create();
    }

    render();
}

このメソッドcreate()は、表示されたのと同じフォームをレンダリングします。

public static void create() {
    boolean isAuthorized = Security.isConnected();
    // Get the user details
    String userid = Security.connected();

    render(isAuthorized, userid);
}

各フィールドの値に検証後に最後に「、」文字が追加されていることを除いて、検証はすべて正常に機能します。完全に空白のフォームを送信すると、すべてのフィールドにコンマ('、')文字が返されます。1つのフィールドにのみ値を入力すると、その値の最後にコンマが貼り付けられて返されます。さらに、もう一度送信すると、コンマが2つ増える前に、すべてのコンマに対して!

編集:${flash['session.jumpTime']?:""} 変数が実際に定義されていることを確認するために使用してみました。

編集:それはparams.flash()メソッドで起こっています。 System.out.println(params.allSimple())はコンマがないことを示していますが、System.out.println(flash)で示されているように、params.flash()の後にflashに格納されている値はコンマを示しています。手動でフラッシュに値を追加すると、コンマが表示されません。

for (Map.Entry<String, String> entry : temp.entrySet())
        {
            flash.put(entry.getKey(), entry.getValue());
        }

このハックは私の問題を解決しますが、なぜparams.flash()だけを使用できないのかを知りたいのです。

4

1 に答える 1

1

私は問題を見つけました、そしてそれは結局Playとは何の関係もありませんでした。私が使用していたjavascriptライブラリ(jQueryツール)は、知らないうちにページ上の要素のクローンを作成していたため、二重フォームの送信が作成されていました。すべてのフォーム要素が2倍になっているため、値はコンマで区切られています。これは、.flash()メソッドにコンマを挿入しただけなので、params変数では検出できませんでした。

Pshaw。

于 2011-10-28T17:30:16.810 に答える