Флэш-переменная Play Framework добавляет запятые для формирования данных
Я проверяю форму в 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);
}
Все проверки работают нормально, за исключением того, что значение в каждом поле имеет символ ",", добавленный в конец после проверки. Если я отправляю полностью пустую форму, она возвращается с запятой (',') в каждом поле. Если я ввожу значение только в одно поле, это значение возвращается с запятой, вставленной в конце. Более того, если я отправлю еще раз, для каждой запятой до того, как теперь есть еще 2 запятые!
РЕДАКТИРОВАТЬ: я также пытался использовать ${flash['session.jumpTime']?:""}
чтобы убедиться, что переменная действительно определена.
РЕДАКТИРОВАТЬ: Это происходит в методе params.flash(). System.out.println(params.allSimple())
показывает, что запятых нет, но значения, хранящиеся во флэш-памяти после params.flash(), как показано в System.out.println(flash), показывают запятые. Когда я добавляю значения для ручной вспышки, запятые никогда не отображаются.
for (Map.Entry<String, String> entry : temp.entrySet())
{
flash.put(entry.getKey(), entry.getValue());
}
Этот хак решает мою проблему, но я все еще хотел бы знать, почему я не могу просто использовать params.flash().
1 ответ
Я нашел проблему, и в конце концов она не имела ничего общего с Play. Библиотека javascript, которую я использовал (инструменты jQuery), клонировала элементы на странице без моего ведома, создавая двойную форму представления. Поскольку каждый элемент формы был удвоен, значения были разделены запятой. Это было невозможно обнаружить в переменной params, потому что она вставляла запятую только в метод.flash().
Тьфу.