Кнопка отправки не отправляет, а только вызывает событие 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)" />
Другие вопросы по тегам