Форма JSF - отправить> сосредоточиться на выбранном входе - PullRequest
2 голосов
/ 24 сентября 2011

У меня есть такая теоретическая ситуация:

  • один просмотр с одной формой [ID: frm]
  • три компонента (например, h:inputText) [ID: inp1, inp2, inp3]
  • три кнопки отправки [ID: btn1, btn2, btn3]

Когда я отправляю форму, используя btn1, мне нужно сосредоточиться на inp1 (аналогично btn2 до inp2, btn3 до inp3)

Я могу использовать функцию javaScript, например onclick="document.getElementById('frm:inp1').focus();" (работает)

Проблема в том, что кнопка отправки вызывает воссоздание вида, после чего настройка javaScript забывается, а компонент не выбирается.

Так как выбрать компонент, который остается выбранным даже после перерисовки представления?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Вы можете включить скрипт на своей странице, который будет обновлять фокус после рендеринга страницы. Обновлять информацию о целевом вводе на сервере в действии слушателей. Сценарий может выглядеть так с jquery:

<script>
  $(document).ready(function() { document.getElementById('frm:#{focusInfo.componentId}').focus(); })
</script>

Предполагается, что вы установили свойство componentId в bean-компоненте focusInfo в action / actionListener, выполняемом на сервере после нажатия кнопки. FocusInfo содержит componentId с геттером и сеттером и, возможно, методами, переключающими componentId и зарегистрированными как actionListeners с вашими кнопками.

0 голосов
/ 12 марта 2015

Используйте компонент PrimeFaces:

<!-- Focus on first field, or first field with error -->
<p:focus context="feesboek"/>

Используйте это в сочетании с компонентом фокуса, и вы будете раскачиваться!

<!-- Default button when pressing enter -->
<p:defaultCommand target="submit"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...