a4j:support event="onchange" executes when it should not
cash1981 Jun 9, 2008 7:17 AMHello.
I have a selectOneMenu which chooses a State. When the state is chosen then it will populate a list and fill another selectOneMenu according to what you chose on the latter. This works fine.
The problem is that this is a part of a bigger form, and when I submit the form, it executes the valueChangeListener method and my form action does not run.
Why is that?
here is the selectOneMenu code:
<s:decorate template="/layout/display.xhtml"> <ui:define name="label">Fylke</ui:define> <h:selectOneMenu value="#{searchProeveManager.fylke}" border="0" valueChangeListener="#{searchProeveManager.updateKommune}" immediate="true"> <s:selectItems value="#{fylkeList.resultList}" var="fylke" label="#{fylke.navn}"/> <a4j:support event="onchange" reRender="kommuneResultat" ajaxSingle="true" /> <s:convertEntity/> </h:selectOneMenu> </s:decorate> <s:div id="kommuneResultat"> <ui:define name="label">Kommune</ui:define> <s:decorate template="/layout/display.xhtml"> <h:selectOneMenu value="#{searchProeveManager.kommune}" border="0"> <s:selectItems value="#{searchProeveManager.kommuner}" var="kom" label="#{kom.navn}"/> </h:selectOneMenu> </s:decorate> </s:div>
And the whole thing xhtml page if you need it.
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j"> <style> .tooltip { background-color:#{richSkin.generalBackgroundColor}; border-width:3px; padding:10px; } </style> <rich:simpleTogglePanel label="Søk etter prøver" switchType="ajax"> <h:form id="searchCriteria" styleClass="edit"> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Fornavn</ui:define> <h:inputText id="searchStringFornavn" value="#{searchProeveManager.searchStringFornavn}" /> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space:nowrap"> Søk på fornavn og mellomavn. * søker på alt. </span> </rich:toolTip> </s:decorate> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Etternavn</ui:define> <h:inputText id="searchStringEtternavn" value="#{searchProeveManager.searchStringEtternavn}" /> </s:decorate> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Fødselsnummer</ui:define> <h:inputText id="searchStringFodselsnr" value="#{searchProeveManager.searchStringFodselsnr}" /> </s:decorate> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Adresse</ui:define> <h:inputText id="searchStringAdresse" value="#{searchProeveManager.searchStringAdresse}" /> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space:nowrap"> Søk på adressen til personen. * søker på alt. </span> </rich:toolTip> </s:decorate> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Fylke</ui:define> <h:selectOneMenu value="#{searchProeveManager.fylke}" border="0" valueChangeListener="#{searchProeveManager.updateKommune}" immediate="true"> <s:selectItems value="#{fylkeList.resultList}" var="fylke" label="#{fylke.navn}"/> <a4j:support event="onchange" reRender="kommuneResultat" ajaxSingle="true" /> <s:convertEntity/> </h:selectOneMenu> </s:decorate> <s:div id="kommuneResultat"> <s:decorate template="/layout/display.xhtml" rendered="#{searchProeveManager.kommuner.size > 0}"> <ui:define name="label">Kommune</ui:define> <h:selectOneMenu value="#{searchProeveManager.kommune}" border="0"> <s:selectItems value="#{searchProeveManager.kommuner}" var="kom" label="#{kom.navn}"/> </h:selectOneMenu> </s:decorate> </s:div> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">År</ui:define> <h:inputText id="searchStringAar" value="#{searchProeveManager.searchStringAar}"/> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space:nowrap"> Velg året prøven ble avlagt i </span> </rich:toolTip> </s:decorate> <s:decorate template="/layout/display.xhtml"> <ui:define name="label">Inneholder prøvetyper:</ui:define> <h:selectManyCheckbox value="#{searchProeveManager.proevetyper}" border="0"> <s:selectItems value="#{proevetypeList.resultList}" var="proevetype" label="#{proevetype.beskrivelse}"/> <s:convertEntity/> </h:selectManyCheckbox> </s:decorate> <s:decorate template="/layout/display.xhtml"> <h:commandButton id="findProeverSoek" value="Finn Prøver" action="#{searchProeveManager.find}" reRender="searchResults" /> </s:decorate> </h:form> </rich:simpleTogglePanel> <rich:simpleTogglePanel label="Søke resultat" switchType="ajax"> <div class="searchResults" id="proeveSokList"> <h:outputText value="Søket resulterte i #{proeveSokList.size} treff" rendered="#{proeveSokList.size > 0}"/> <h:form> <rich:spacer height="20" rendered="#{proeveSokList.size > 0}" /> <rich:dataTable id="proeveSokList" var="proeve" value="#{proeveSokList}" rendered="#{proeveSokList.size > 0}" rows="20" sortMode="single"> <rich:column sortBy="#{proeve.person.etternavn}"> <f:facet name="header"><h:outputText value="Etternavn"/></f:facet> <h:outputText value="#{proeve.person.etternavn}"/> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space: nowrap"> <strong>Navn: </strong>#{proeve.person.fornavn} #{proeve.person.mellomnavn} #{proeve.person.etternavn}<br /> <strong>Fødselsdato: </strong>#{proeve.person.foedselsdato}<br /> </span> </rich:toolTip> </rich:column> <rich:column sortBy="#{proeve.person.fornavn}"> <f:facet name="header"><h:outputText value="Fornavn"/></f:facet> <h:outputText value="#{proeve.person.fornavn}"/> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space: nowrap"> <strong>Navn: </strong>#{proeve.person.fornavn} #{proeve.person.mellomnavn} #{proeve.person.etternavn}<br /> <strong>Fødselsdato: </strong>#{proeve.person.foedselsdato}<br /> </span> </rich:toolTip> </rich:column> <rich:column> <f:facet name="header"><h:outputText value="Personnummer"/></f:facet> <h:outputText value="#{proeve.person.personnummer}"/> <rich:toolTip followMouse="false" direction="top-right" styleClass="tooltip"> <span style="white-space: nowrap"> <strong>Navn: </strong>#{proeve.person.fornavn} #{proeve.person.mellomnavn} #{proeve.person.etternavn}<br /> <strong>Fødselsdato: </strong>#{proeve.person.foedselsdato}<br /> </span> </rich:toolTip> </rich:column> <rich:column sortBy="#{proeve.avlagt}"> <f:facet name="header"><h:outputText value="Prøve Avlagt"/></f:facet> <h:outputText value="#{proeve.avlagt}"/> </rich:column> <rich:column sortBy="#{proeve.bestaatt}"> <f:facet name="header"><h:outputText value="Prøve Bestått"/></f:facet> <h:outputText value="Ja" rendered="#{proeve.bestaatt}" /> <h:outputText value="Nei" rendered="#{!proeve.bestaatt}" /> </rich:column> <rich:column sortBy="#{proeve.proevetype.beskrivelse}"> <f:facet name="header"><h:outputText value="Prøvetype"/></f:facet> <h:outputText value="#{proeve.proevetype.beskrivelse}"/> </rich:column> <rich:column sortBy="#{proeve.proevetypeVersjon.navn}"> <f:facet name="header"><h:outputText value="Prøvetype versjon"/></f:facet> <h:outputText value="#{proeve.proevetypeVersjon.navn}"/> </rich:column> <rich:column sortBy="#{proeve.kommune.navn}"> <f:facet name="header"><h:outputText value="Kommune"/></f:facet> <h:outputText value="#{proeve.kommune.navn}"/> <rich:toolTip showEvent="onclick" followMouse="false" mode="ajax" direction="top-right" styleClass="tooltip"> <span style="white-space: nowrap"> Prøven ble avlagt i <strong>#{proeve.kommune.navn}</strong> kommune </span> </rich:toolTip> </rich:column> <rich:column> <f:facet name="header"><h:outputText value="Rediger"/></f:facet> <s:link view="/protected/#{empty from ? 'Proeve' : from}.xhtml" value="Velg" id="proeve"> <f:param name="proeveProeveId" value="#{proeve.proeveId}" /> </s:link> </rich:column> </rich:dataTable> <rich:datascroller align="left" for="proeveSokList" maxPages="10" rendered="#{proeveSokList.size > 0}" renderIfSinglePage="false"/> </h:form> </div> </rich:simpleTogglePanel> </ui:composition>