Почему в JSP мои радиокнопки больше не вызывают onSubmit? - PullRequest
0 голосов
/ 24 ноября 2010

Основное обновление: из-за Spring валидатор вызывается до вызова onSubmit.Когда никакие переключатели не выбраны, это работает нормально.Когда выбран переключатель, данные POST содержат переменную для переключателя, и это вызывает исключение NestedServletException.

Эта переменная не связана ни с каким свойством или классом.Есть ли «правильный» способ обработки такой переменной, либо внутри JSP, либо внутри моего кода?


У меня есть страница JSP, подключенная к Spring, где прослушиватель onSubmit отсутствуетболее долго вызывается после того, как я добавлю несколько переключателей на страницу JSP.Без переключателей голая версия страницы выглядит следующим образом.

<form:form>
    <fieldset>
        <input type="submit" value="Submit"/>
    </fieldset>
</form:form>

Это работает, как и ожидалось.Мой отладчик достигает точки останова для onSubmit после нажатия кнопки отправки.Затем я добавляю следующий код для переключателей, который можно увидеть ниже.

<form:form>
    <fieldset>
        <input type="submit" value="Submit"/>
    </fieldset>

    <fieldset class="contentHalfFieldset"><legend>NID</legend>
        <input type="radio" name="someName" value="value1" />
        <input type="radio" name="someName" value="value2" />
        <input type="radio" name="someName" value="value3" />
    </fieldset>
</form:form>

Теперь, , когда я не выбираю какую-либо кнопку переключателя, кнопка отправки по-прежнему вызывает достижение события отправкиточка останова в методе onSubmit .Это все еще работает как задумано.Однако, когда я выбираю одну из переключателей и затем нажимаю кнопку отправки, страница просто обновляется.

Почему это так?Что происходит, что заставляет кнопки ввода препятствовать обработке отправки?

------- Сгенерированный HTML -------

<form id="cmd" method="post" action="/page/pageAction.html?param=k" onsubmit="disableSubmit(this);">
    <fieldset class="contentHalfFieldset"><legend>NID</legend>
        <label class="labelClass">First radio button:</label>
        <input type="radio" name="nidStatus" value="first" /><br style="clear: both"/>
        <label class="labelClass">Second radion button:</label>
        <input type="radio" name="nidStatus" value="second" /><br style="clear: both"/>
        <label class="labelClass">Third radio button</label>
        <input type="radio" name="nidStatus" value="third" /><br style="clear: both"/>
    </fieldset>

</form>

------- Больше запрашиваемого кода -------

Это метод disableSubmit (..).

function disableSubmit(parentElement) {
    elements = parentElement.elements;

    for(var i = 0; i < elements.length; i++) {
        var element = elements[i];

        if(element.type == "submit") {
            element.disabled=true;
            element.value="Please Wait...";
        }
    }
};

1 Ответ

0 голосов
/ 30 ноября 2010

Spring пытается связать ваши переменные, если они названы так же, как ваши элементы управления (в моем случае, переключатель).В зависимости от вашего кода для обработки переменной., который вы не собираетесь связывать , может быть исключение до того, как будет достигнут метод onSubmit.

В моем случае у меня был класс, в котором была переменная nidStatus, перечислениятип.Когда переменная «US & nidStatus» (см. Комментарии в ответ на Михаила Копинского) была отправлена ​​в действии POST, была автоматическая попытка связать это.Интересно, что проверка прошла успешно до того, как было сгенерировано исключение , поэтому - если вы нашли этот вопрос, несмотря на то, что кто-то пометил его как неприемлемый - обязательно проверьте переменную ошибок в вашем методе validate (), так как обработчиквсе еще продолжай дальше, как будто все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...