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()だけを使用できないのかを知りたいのです。