0

ユーザーが ajax を使用して入力テキストに何かを入力すると、ラジオ ボタンの値が自動的に選択されます。問題は、ユーザーが入力テキストに何かを入力し、 をクリックしてフォームを直接送信するGetと、フォームは送信されず、変更イベントのために ajax だけが呼び出され、ラジオが更新されることです。

ボタンを2 回クリック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
    }
}
4

1 に答える 1

1

送信ボタンは送信せず、InputText の onChange イベントをトリガーするだけです

これblurは、入力フィールドのイベントが、クリックした瞬間に送信ボタンを ajax 更新するために発生しました。この方法では、ソース要素が DOM から削除されるため、送信ボタンに関連付けられた JavaScript/Ajax ロジックが動作することが保証されなくなります。

ajax アップデートで送信ボタンを覆わないようにしてください。

フォーム全体を更新する代わりに、

<p:ajax ... update="@form" />

実際に更新する必要がある部分のみを更新します。これは、特定のケースの入力のみです。

<p:ajax ... update="IncludeRadio FieldValueInputText" />

または、多くの入力があるときにこれらすべての ID を追跡したくない場合は、PFSを取得します。

<p:ajax ... update="@(#myForm :input)" />
于 2016-02-09T11:15:17.050 に答える