Enter Key Press ведет себя как Submit в JSF

Как заставить нажатие клавиши Enter вести себя как Submit в JSF. Он работает с InputBox; но не с входными секретными ящиками


person ComputerPilot    schedule 10.03.2010    source источник


Ответы (6)


Я не видел эту проблему раньше. Маловероятно, что такое поведение зависит от браузера. Попробуйте в разных браузерах исключить и то, и другое (IE6/7/8, FF, Safari, Chrome и т.д.). Шанс больше, что это вызвано (плохим) прослушивателем событий ключа Javascript, который неправильно подавляет клавишу ввода (например, средство проверки пароля JS, которое проверяет введенные символы).

Если все еще зря, просто добавьте следующее onkeypress к h:form:

<h:form onkeypress="if (event.keyCode == 13) this.submit();">

Однако вам необходимо учитывать текстовые поля. Если они у вас есть, вам нужно самостоятельно скопировать все onkeypress события поверх h:inputXXX элементов expect текстовых полей.

person BalusC    schedule 10.03.2010
comment
Это зависит от браузера, особенно при наличии нескольких форм на одной странице. - person Thorbjørn Ravn Andersen; 10.03.2010
comment
@Thorbjorn: он работает с полями ввода, но не с полями inputsecret, и я ожидаю, что в данном конкретном случае они имеют ту же форму. Несколько форм не должно быть проблемой, зная тот факт, что клавиша ввода будет отправлять только родительскую форму. Кроме того, есть ошибка IE, которая не заставляет родительскую форму отправляться, если есть только один элемент ввода. Но, скорее всего, здесь все не так. - person BalusC; 11.03.2010
comment
Имейте в виду, что с текстовой областью (в отличие от типа ввода текста) люди думают, что вы можете нажать Enter, чтобы получить новую строку — действительно ли они хотят, чтобы форма была отправлена? - person Fenton; 12.03.2010
comment
не совсем. Вы рассказали, как добавить событие в текстовые области, но не указали, что необходимо принять решение о том, является ли это хорошей идеей (как правило, это плохая идея). - person Fenton; 15.03.2010

Если вы хотите нажать клавишу ENTER вместо отправки в любой форме, нам нужно добавить атрибут defaultcommand в тег af:form и указать идентификатор кнопки отправки в качестве значения. Пример фрагмента кода для этого

<af:form id="f1" defaultCommand="cb1">
<af:outputText value="User Name" id="usename"/>
          <af:inputText value="#{BackingBean.userName}" id="uname" />
          <af:outputText value="Password" id="pword"/>
          <af:inputText value="#{BackingBean.password}" id="paword" secret="true"/>
          <af:commandButton text="Submit" action="#{BackingBean.method}" id="cb1" />
</af:form> 
person Santhosh    schedule 30.05.2012

Я заставил это работать, поместив дополнительный inputBox и спрятав его с помощью javascript. Дайте мне знать, если у вас есть какие-либо другие предложения. Спасибо, baluC, за то, что указали мне правильное направление, Джерри.

person ComputerPilot    schedule 12.03.2010

проверено с помощью jsf 2. поставить:

<h:commandButton id="hidden" style="visibility: hidden;" action="#{mybean.myaction()}" />

в твоей форме

person Davide Consonni    schedule 04.10.2012

Из ответа ComputerPilot я узнал, что это ошибка в IE, которая не заставляет родительскую форму отправляться, если есть только один элемент ввода. Чтобы решить эту проблему, я добавил еще одно поле ввода с атрибутом style="display:none", и все заработало нормально.

person Sandip Ashok Pol    schedule 27.01.2011

Есть старая спецификация, которая приходит мне на ум вместе с этим. Если у вас есть форма, которая содержит только одно поле ввода, поведение отправки с помощью клавиши enter не работает в некоторых версиях Internet Explorer. Самое простое решение — убедиться, что у вас есть более одного поля ввода.

Другие причины этой проблемы включают...

  • Отсутствие ввода типа submit
  • Имея ввод типа submit, но он не виден на странице (скрыт или расположен за пределами страницы)

Такое поведение очень специфично для этого браузера.

Отчет об ошибке MS здесь: connect.microsoft.com: значение кнопки отправки не опубликовано при отправке формы

person Fenton    schedule 12.03.2010