0

使用以下代码,我得到了我无法解释的行为。

自动完成方法可以很好地选择一个对象。它按预期更新了下面的面板。

但是这两个按钮(新机场,保存机场)没有触发支持 bean 侦听器。但是,如果我在使用自动完成加载对象之前单击其中一个按钮,则会触发侦听器。

<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

正如你所说,你不应该嵌套不正确的形式。此外,当您将所有内容放在一个主目录中时form,这意味着您在提交该表单时正在混合流程。每个页面可以有很多表格,例如自动完成表格或个人资料信息表格等。

当你做某事时。关于自动完成实际上你想提交关于自动完成的东西而不是其他按钮,所以只需将它们分开即可。这并不意味着您应该为每个组件都有表单,而只是将您的页面分成主要部分。

于 2013-04-27T18:06:19.687 回答