Флэш-переменная Play Framework с добавлением запятых для формирования данных - PullRequest
2 голосов
/ 27 октября 2011

Я проверяю форму в 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);
}

Проверка работает нормально, за исключением того, что значение в каждом поле имеет символ ','символ добавлен в конец после проверки.Если я отправляю полностью пустую форму, она возвращается с запятой (',') в каждом поле.Если я ввожу значение только в одно поле, это значение возвращается с запятой, вставленной в конце.Более того, если я отправлю еще раз, для каждой запятой до того, как появятся еще две запятые!

РЕДАКТИРОВАТЬ: Я также пытался использовать ${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 Ответ

1 голос
/ 28 октября 2011

Я нашел проблему, и в конце концов она не имела ничего общего с Play. Библиотека javascript, которую я использовал (инструменты jQuery), клонировала элементы на странице без моего ведома, таким образом создавая двойную форму представления. Поскольку каждый элемент формы был удвоен, значения были разделены запятой. Это было невозможно обнаружить в переменной params, потому что она вставляла запятую только в метод .flash ().

Тьфу.

...