Javascript отправив все формы на странице - PullRequest
1 голос
/ 26 июня 2009

Я использую JSF 1,2. Когда конкретный jsp имеет более одной формы с указанным идентификатором, например, когда используется что-то вроде ниже, jsf дает форме, казалось бы, случайный идентификатор.

<ui:repeat>
   <h:form id="repeatingform">
      ...

Я хотел бы отправить все формы, используя JavaScript. Есть ли способ сделать это, не зная идентификаторов форм?

Ответы [ 4 ]

5 голосов
/ 26 июня 2009

Отправка более чем одной формы одновременно не представляется возможной. Проблема в том, что каждая форма требует отдельного отдельного запроса - отправка формы в основном похожа на щелчок по ссылке, и вы не можете открыть все ссылки на странице одновременно (вы можете открыть их в новых вкладках / окнах, но другое дело)

Если вы действительно хотите оставить каждую форму отдельным элементом формы, вы можете использовать пример Aquatic,

var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++) 
forms[i].submit();

, но замените код, который запускается submit(), на код, который отправляет форму с использованием XMLHttpRequest. В фоновом режиме может выполняться несколько запросов XMLHttpRequest.

3 голосов
/ 26 июня 2009

Хм, это не так просто. Если бы вы использовали что-то вроде document.form1.submit (); он публикует эту конкретную форму и все значения в ней. Так что бесполезно перебирать все формы и отправлять каждую . Это будет то же самое, что нажать кнопку «Отправить» в каждой отдельной форме, в результате каждая форма будет опубликована отдельно. Решение состоит в том, чтобы собрать значения каждого поля в каждой форме в одной форме коллектора и опубликовать форму коллектора. Вы можете прочитать (с примерами кода!) Больше об этом здесь: http://www.codetoad.com/forum/15_24387.asp

0 голосов
/ 26 июня 2009

Я думаю, что есть несколько частей этой проблемы. 1. Вы пытаетесь отправить несколько форм в JSF? Существует способ, позволяющий сегрегировать компоненты в разных формах, а затем отправлять выбранную группу из них, если требуется. Внешняя метка может быть, и внутри них может быть столько, сколько вам захочется. (Пожалуйста, знайте, что t: subform - это библиотека tomahawk ; но она хорошо работает с JSF). Также подчиненные формы могут быть представлены в выбранной группе, используя t: commandButton . Обратите внимание на последний абзац, посвященный описанию подчиненной формы, что все формы с идентификаторами через запятую могут быть отправлены так например некоторые элементы управления вводом здесь

больше контроля здесь

Вся лотота контролирует здесь

что-то вроде этого позволит вам отправлять выборочные формы и проверяющие компоненты только для тех форм, которые вы хотите проверить. Если это то, что вы действительно пытаетесь сделать здесь.

Но если вы действительно хотите отправить эти формы одним куском java-скрипта, у меня есть небольшой совет, javascript поддерживает динамический поиск тегов форм в дереве dom, как показано в примере выше с помощью aquatic. Вы также можете обойти эти элементы пользовательского интерфейса, реализовав PhaseListener, который вызывается перед фазой «RENDER_RESPONSE», а затем перебрать ComponentUITree, чтобы получить имена или список всех компонентов пользовательского интерфейса, а затем предоставить их в javascript с помощью переменных сценариев или переменных $, которые JSP 2 поддерживает.

Я мог бы дать более подробные ответы или примеры, если бы вы могли точно изложить свою проблему относительно того, ПОЧЕМУ вы хотите использовать общий сценарий Java и намереваетесь ли вы отправлять несколько форм параллельно или вы намерены отправлять их по одной (как и когда требуется), но с помощью общего куска сценария Java.

Параллельная отправка компонента формы HTML на самом деле невозможна до тех пор, пока вы не используете javascript для накопления значений компонентов из всех форм, а затем выполняете много ручных манипуляций.

Дайте более подробную информацию о вашем действительном намерении.

0 голосов
/ 26 июня 2009

Вы можете получить доступ ко всем формам на странице следующим образом

var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++) 
    forms[i].submit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...