Кнопка отправки не отправляет, а только вызывает событие onChange InputText
Я автоматически выбираю значение для радиокнопки, когда пользователь вводит что-то во входной текст, используя ajax. Проблема в том, что когда пользователь вводит что-то во входной текст и напрямую отправляет форму, нажимая Get
форма не отправляется, но вызывается только ajax из-за события change и радио обновляется.
Второй клик по Get
Кнопка, отправляет форму.
Я тоже не хочу использовать keyup
так как это мешает пользователю при наборе текста.
Я использую Primefaces 5.1
вот мой код:
<h:form id="myForm">
<p:selectOneRadio
value="#{myBean.include}" id="IncludeRadio">
<f:selectItem itemValue="Include" itemLabel="Include" />
<f:selectItem itemValue="Exclude" itemLabel="Exclude" />
<p:ajax process="@this" update="@form" />
</p:selectOneRadio>
<p:radioButton id="IncludeRadio0" for="IncludeRadio" itemIndex="0"/>
<p:radioButton id="IncludeRadio1" for="IncludeRadio" itemIndex="1"/>
<p:inputText
value="#{myBean.fieldValue}"
id="FieldValueInputText">
<p:ajax process="@this" update="@form" />
</p:inputText>
<p:commandButton id="GetButton"
action="#{myBean.execute}"
value="Get">
</p:commandButton>
</h:form>
и боб:
@ManagedBean
@SessionScoped
public class MyBean {
public void setFieldValue(final String fieldValue) {
if (fieldValue != null && !fieldValue.trim().isEmpty()) {
if (!"Include".equals(getInclude())
&& !"Exclude".equals(getInclude())) {
setInclude("include");
}
} else {
setInclude("");
}
}
public void setInclude(String include) {
this.include = include;
}
public String getInclude() {
return this.include;
}
public void execute() {
// do something
}
}
1 ответ
Кнопка отправки не отправляет, а только вызывает событие onChange InputText
Это произошло потому, что blur
событие поля ввода ajax-обновляет кнопку отправки примерно в тот момент, когда вы нажимаете на нее. Таким образом, логика JavaScript/Ajax, связанная с кнопкой отправки, больше не гарантируется, поскольку исходный элемент удаляется из DOM.
Убедитесь, что вы не закрыли кнопку отправки в обновлении ajax.
Вместо обновления всей формы,
<p:ajax ... update="@form" />
обновите только те части, которые действительно необходимо обновить, и которые являются только входными данными в вашем конкретном случае:
<p:ajax ... update="IncludeRadio FieldValueInputText" />
Или, если вы хотите не отслеживать все эти идентификаторы, когда у вас много входов, возьмите PFS:
<p:ajax ... update="@(#myForm :input)" />