Флэш-переменная 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().

Тьфу.

Другие вопросы по тегам