#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», чтобы отправить всю форму