Как отправить форму, используя функцию javascript в JSF с Richfaces, без имени или идентификатора формы?

#javascript #jsf #richfaces

#javascript #jsf #richfaces

Вопрос:

Как бы я отправил форму в Richfaces без имени формы или идентификатора из javascript? Я думал, что мог бы использовать тег jsFunction, но я не смог разобраться в этом.

В качестве примечания я могу задать имя функции в jsFunction

РЕДАКТИРОВАТЬ RF 3.3, JSF 1.2

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

1. RichFaces 3.3.x или 4.x? JSF 1.x или 2.x?

Ответ №1:

Это невозможно без повторения идентификатора формы и без знания точного местоположения формы в дереве HTML DOM в отличие от элемента, из которого вы хотели бы отправить форму.

В лучшем случае вы могли бы использовать функцию EL rich:element() . Представьте, что у вас есть форма, подобная этой:

 <h:form id="myform">
  

затем вы могли бы использовать rich:element() следующее в контексте JS (на странице JSF!), чтобы получить форму в виде элемента HTML DOM:

 <script>
    var form = #{rich:element('myform')};
    form.submit();
</script>
  

Это, в частности, генерируется в HTML следующим образом

 <script>
    var form = document.getElementById('myformOrWhateverClientIdItHas');
    form.submit();
</script>
  

Смотрите также:


Обновление: Или, когда функция JS вызывается элементом внутри самой формы, просто используйте this.form для получения родительского элемента формы рассматриваемого элемента HTML DOM. Например.

 <h:selectBooleanCheckbox onclick="doSomething(this.form)" />
  

с помощью

 function doSomething(form) {
    // ...
    form.submit();
}
  

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

1. Было бы возможно, если бы я мог узнать идентификатор элемента внутри формы? Возможно, скрытая кнопка или jsFunction или что-то еще? Также, как всегда, мы высоко ценим вашу помощь BalusC.

2. Это полностью зависит от контекста JS. Где и как именно вы выполняете функцию JS? Смотрите обновленный ответ для примера.

3. Javascript является внешним по отношению к форме, но я думаю, что мог бы объединить две части вашего ответа на #{rich:element('myHiddenElementInAForm').form.submit() . Я сообщу, если это сработает.

4. Это решение позволило мне отправить мою форму извне, зная идентификатор элемента в форме! Спасибо BalusC!

Ответ №2:

Вам не нужно имя формы или идентификатор для отправки с использованием a4j: jsFunction.

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

1. Верно, но как мне заставить a4j: jsFunction отправлять всю прилагаемую форму, а не только value ? Другими словами, как мне использовать a4j: jsFunction для запуска полной отправки формы?

2. Он всегда отправляет всю форму.

3. Хм, это был не мой опыт, но это было то, что я ожидал, что произойдет. Возможно, что-то еще нарушило жизненный цикл. Спасибо за ответ, я изучу его подробнее.

Ответ №3:

Если вы хотите использовать a4j:jsFunction, не забудьте добавить execute=»@form», чтобы отправить всю форму