2014-01-31 3 views
4

Я использую JSF2.1.Форма submit vs ajax execute = "@ form"

В чем разница между execute="@form" и this.submit() в коде ниже?

<f:ajax execute="@form" render="@form"/> 

и:

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

Первое, кажется, представить значения и вновь сделать форму, в то время как последний вызывает обновление страницы. Есть ли способ использовать ajax, когда клавиша ввода нажата в форме? Я пытаюсь обнаружить нажатие клавиши ввода в поле inputText. Я пытался что-то вроде этого:

<h:inputText value="#{a.name}" > 
    <f:ajax execute="@this" /> 
</h:inputText> 

, но это только приводит к тому, значения должны быть представлены при нажатии на что-то другое (после valueChange).

ответ

3

Для того, чтобы ответить на название вашего вопроса, в разница между ними является то, что форма представить посылает всю форму и перезагружает вид, в то время как выполнение формы Ajax также представляет всю форму, но с помощью запроса AJAX, который может используется для отображения только определенной части представления до того, как произойдет ответ.

Относительно к содержанию вопроса, форма представить, нажав Enter ключ реализуется в основных браузерах для одного входа формирует. Не нужно javascripting событие onkeypress, так как браузер обнаружит это и отправит форму по умолчанию.

Так следующий кусок кода имеет тот же результат для стороне сервера, либо нажав Отправить кнопку или Enter Кеу: value атрибут быть установлен. Обратите внимание, что во втором виде, где <h:inputText /> имеет поведение ajax, значение h:outputText также обновляется (даже не указывается атрибут render) при попадании в . Введите ключ, это связано с тем, что полный запрос отправки приоритет над ajax запрос, и вся страница будет перезагружена. Только Google Chrome говорит об этом конфликте: httpError: Http Transport возвратил код состояния 0. Обычно это результат смешивания ajax и полных запросов.

Полный запрос:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 
<h:head /> 
<body> 
    <h:form> 
     <h:inputText value="#{bean.value}" /> 
     <h:commandButton value="Send" /> 
    </h:form> 
</body> 
</html> 

Ajax запрос:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 
<h:head /> 
<body> 
    <h:form> 
     <h:inputText value="#{bean.value}"> 
      <f:ajax /> 
     </h:inputText> 
     <h:outputText value="Echo: #{bean.value}" /> 
    </h:form> 
</body> 
</html> 

Когда форма имеет более чем поле ввода вы можете использовать такой яваскрипт проверку для отправки если нет кнопки отправки, используя полный запрос на отправку. Если есть, делать это не нужно.

Наконец, если вы хотите, чтобы выполнить запрос AJAX при ударе значения модели ключа и обновления, используйте onkeypress атрибут:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 
<h:head /> 
<body> 
    <h:form> 
     <h:inputText value="#{bean.value}" 
      onkeypress="if (event.keyCode == 13) {onchange(); return false; }"> 
      <f:ajax render="echo" /> 
     </h:inputText> 
     <h:inputText value="#{bean.value2}" /> 
     <h:outputText id="echo" value="Echo: #{bean.value}" /> 
    </h:form> 
</body> 
</html> 

Напомним, что желательно использовать кнопку отправки для обычной доступности важно.

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