0

次のコードを使用すると、説明できない動作が発生します。

オートコンプリート メソッドは、オブジェクトを選択するために正常に機能します。期待どおりに下のパネルを更新します。

しかし、2 つのボタン (New Airport、Save Airport) はバッキング Bean リスナーを起動していません。ただし、オートコンプリートを使用してオブジェクトをロードするにボタンの 1 つをクリックすると、リスナーが起動します。

<h:form id="arptForm">
            <p:autoComplete minQueryLength="3"
                value="#{airportHandler.theAirportNames}" effect="fade"
                completeMethod="#{airportHandler.autoComplete}"
                forceSelection="true" converter="airportNamesConverter"
                var="airport" itemLabel="#{airport.icaoName}" itemValue="#{airport}"
                maxResults="#{airportHandler.maxAutoCompleteResults}">
                <f:ajax event="itemSelect"
                    listener="#{airportHandler.airportChanged}" render="@form" />
                <p:column style="width:80%">
                    <h:outputText
                        value="#{airport.icaoName} - #{airport.iataName} - #{airport.airportName} (#{airport.cityName})" />
                </p:column>
            </p:autoComplete>
            <p:spacer width="20" height="20" />
            <p:commandButton id="newAirport" value="New Airport"
                icon="ui-icon-newwin" actionListener="#{airportHandler.newAirport}"
                update="@form" />
            <p:spacer width="20" height="20" />
            <p:commandButton id="saveAirport" value="Save Airport"
                icon="ui-icon-newwin" actionListener="#{airportHandler.saveAirport}"/>
            <p:separator />

            <p:outputPanel id="allArptData">

                <p:panel id="airportBasics" header="Airport Basics"
                    toggleable="true" toggleSpeed="500"
                    rendered="#{airportHandler.theAirport != null}">
                    <ui:include src="airportbasics.xhtml" />
                </p:panel>

                <p:panel id="airportRunways" header="Airport Runways"
                    toggleable="true" toggleSpeed="500"
                    rendered="#{airportHandler.theAirport != null}">
                    <ui:include src="airportrunways.xhtml" />
                </p:panel>


            </p:outputPanel>
        </h:form>

何が起こるか説明できますか?ありがとう

4

1 に答える 1

0

あなたが言ったように、正しくないネストフォームを使用しないでください。また、すべてを 1 つのメイン内に配置するformと、そのフォームを送信するときにプロセスが混在していることになります。オートコンプリート フォームやプロフィール情報フォームなど、ページごとに多数のフォームが存在する場合があります。

あなたがsthをするとき。オートコンプリートについて実際には、他のボタンではなくオートコンプリートに関するものを送信したいので、単にそれらを分離します。これは、コンポーネントごとにフォームを用意する必要があるという意味ではなく、ページをメイン セクションに分けるだけです。

于 2013-04-27T18:06:19.687 に答える