Вложенность форм — JSP, HTML

#java #html #eclipse #forms #jsp

#java #HTML #eclipse #формы #jsp

Вопрос:

Итак, последние несколько дней я читал о JSP и HTML. Я читал, что в HTML невозможно иметь вложенные формы.

У кого-нибудь есть какие-либо указания на то, как это сделать? Есть ли какой-нибудь JSP-код, который может помочь в этом? В моей книге по JSP / Java такого понятия нет.

Видите ли, у меня есть форма, в которую есть элементы, которые пользователь может динамически добавлять или удалять, включая новые формы. Итак, вы можете думать об этом как об иерархии — у меня есть родительская форма с X (определяемыми пользователем) дочерними элементами, у каждого дочернего элемента может быть Y (определяемых пользователем) дочерних элементов .. и т.д. Поэтому, когда форма отправляется, она создает новую форму внутри этой формы — затем, когда отправлена самая внешняя форма, все детали форм и подчиненных форм затем объединяются в отчет (я еще не решил, что я собираюсь делать с этой информацией). Вся эта информация зависит от местоположения, поэтому вложение обязательно.

Я создал хак с глобальными переменными и некоторым javascript, но он уязвим и, скорее всего, сломается, когда будет добавлена концепция «пользователей» с сеансами и т.д. Поэтому я вообще не хочу это использовать, учитывая, что отлаживать будет больно.

Спасибо, U.

Ответ №1:

Ваше первое утверждение верно; вы не можете вкладывать формы в HTML.

Если вы напишете что-то похожее на HTML с вложенными формами, вы, вероятно, обнаружите, что поведение отличается в разных браузерах. Некоторые могут обрезать поля формы после первого </form> блока, некоторые могут отправлять все элементы поля, некоторые могут работать так, как вы ожидаете.

Если ваши данные иерархичны по своей природе, как предполагает ваш пост, то я бы, вероятно, справился с этим так, чтобы иметь один <form> элемент со многими <submit> кнопками. Затем вы можете выбрать проверку только полей формы, связанных с кнопкой, которую нажал пользователь. например, если они нажимают «Дочерний элемент 1», тогда ваш JSP просто просматривает поля, связанные с «Дочерним элементом 1».

Однако вам нужно убедиться, что имена ваших полей имеют уникальные имена — например, с помощью какой-либо иерархической схемы именования — например <input type="text" name="Parent_Child1_name">

Комментарии:

1. Я согласен и пробовал это (в основном) — однако как насчет остального моего контента — конечно, неправильно размещать всю HTML-страницу внутри предложения <form></form>?? Спасибо

2. Вы бы не стали помещать всю свою HTML-страницу внутрь <form> / </form> , но я не вижу проблемы с размещением подавляющего большинства ваших <body> страниц в одной.

3. Да, спасибо. Похоже, что это не так, есть 1 форма с 2 дочерними формами, которые содержат submit <input> , и у каждой из них есть submit <input>, поэтому, когда я нажимаю на дочерний элемент дочерней отправки, 1-й дочерний элемент закрывается, поскольку запрос на эту 1-ю отправку больше не отправляется — следовательно, 1-й дочерний элемент не открывается, а 3-й не будет… этот способ кажется хакерским — я серьезно не могу поверить, что no1 где-либо в мире не требует вложенных форм. Я постоянно вижу это на сайтах, добавляйте новые элементы, чтобы сделать эту страницу такой, какой вы хотите, нажимая кнопки и добавляя HTML-элементы, которые сами по себе могут быть добавлены в

4. Я видел, как другие программисты выполняли манипуляции с формами, используя <iframe> и javascript, я не уверен, что это правильный путь. Однако возможно ли манипулировать компонентами iframe и извлекать их с помощью java и jsp? Спасибо, U.

5. Я подозреваю, что ваша проблема с вашими двумя дочерними элементами находится на стороне сервера; если вы не используете методы AJAX, то, если вы нажмете любую кнопку отправки, вам придется воспроизвести всю форму, включая все дочерние элементы, а не только ту, которую вы отправили.

Ответ №2:

Прочитав ваше описание, я сразу подумал о jQuery и JavaScript. Вы могли бы динамически изменять DOM, чтобы добавлять и удалять HTML-элементы по мере необходимости, а не вкладывать <form> элементы. Я бы рекомендовал попробовать это.

Комментарии:

1. Можно даже создавать вложенные формы в JavaScript. Поведение элементов управления внутри вложенных форм полностью определяется HTML5. Только анализатор HTML (text / html) останавливает создание вложенных форм.

2. Я мало смотрел на DOM, но, по сути, он представляет html-документы в иерархическом виде — т. Е. document.parent.textfield и т.д. И т.п. — Это будет работать фундаментально, я просто недостаточно использовал, чтобы знать, является ли создание / удаление аспектов простым или гибким и т.д. Спасибо за ваш ответ. Ценю это. U.

3. dev.w3.org/html5/spec/forms.html#the-form-element конкретно говорится, что для формы «нет потомков элемента формы» — я интерпретирую это как означающее, что вы не можете вкладывать формы.

4. @gdt — здесь есть два разных варианта использования слова «не могу». Есть «=невозможно», и есть «=недопустимо». Синтаксический анализатор HTML делает невозможным выполнение этого в текстовом / html mime-типе; спецификация делает это нарушением модели содержимого, т. е. недопустимым. Но с помощью JavaScript это определенно возможно. Смотрите dev.w3.org/html5/spec /… для описания того, как работает связь формы с элементом управления, обратите особое внимание на строку, которая начинается «Элемент, связанный с формой, по умолчанию связан со своим ближайшим элементом формы-предком …»

5. @Alohci — Ты прав. Это технически возможно, и поведение четко определено в спецификации (хотя в итоге вы все равно получите несоответствующий документ). Хотя лично я думаю, что избегал бы этого делать, я подозреваю, что отладка была бы болезненной.