s:decorate: problem with correct rerendering
rdeckbuzzamite Apr 15, 2011 1:54 AMThe task which I have to do is the following:
On a form where you can enter zip/city (one field) and choose country (another field), there shall be a suggestionBox for the zip/city field, but only when the country is switzerland, because for this country I have data available through a suggestion service.
So I use a a4j:support on the country selection field where I rerender the s:decorate field containing the zip/city field. 
The effect is that the rendering condition of the suggestionbox (s:fragment) will be evaluated (correct), but the zip/city field will also be rerender, which I don't want. So I tried to rerender only the s:fragment part, but then, the condition is not evaluated correctly.
How can I do it to not rerender the zip/city field and get the rendering condition of the suggestionBox still correct?
Below is my code:
          <a4j:outputPanel id="locationPlzNameCountry" layout="block">
               <s:decorate id="locationPlzName" template="/layout/forms_edits.xhtml">
                    <ui:define name="label">#{messages['myaccount.personal.codePlace']}</ui:define>
                    <ui:define name="control">
                         <h:inputText id="zipCity" value="#{personalBean.zipCity}"
                              required="false" />
                         <s:fragment id="locationPlzNameSuggest"
                              rendered="#{personalBean.curriculumVitae.userAccount.address.country.key == 'switzerland' || personalBean.curriculumVitae.userAccount.address.country.key == 'liechtenstein'}">
                              <rich:suggestionbox id="zipCitySuggestionBox" height="300"
                                   width="227" var="_suggest"
                                   suggestionAction="#{locationSuggestionBean.suggestZipCity}"
                                   nothingLabel="#{messages['jobsearch.search.city.noresult']}"
                                   for="zipCity" minChars="2" limitToList="true">
                                   <h:column>
                                        <h:outputText value="#{_suggest}" />
                                   </h:column>
                              </rich:suggestionbox>
                         </s:fragment>
                    </ui:define>
               </s:decorate>
               <s:decorate template="/layout/forms_edits.xhtml">
                    <ui:define name="label">#{messages['myaccount.personal.land']}<b
                              class="grey">*</b>
                    </ui:define>
                    <ui:define name="control">
                         <h:selectOneMenu required="true"
                              requiredMessage="#{messages['myaccount.curriculum.personal.country.required']}"
                              value="#{personalBean.curriculumVitae.userAccount.address.country}">
                              <s:selectItems value="#{myAccountBean.countryList}" var="country"
                                   label="#{countryConverter.label(country)}"
                                   noSelectionLabel="#{messages['myaccount.curriculum.no_selection']}" />
                              <f:converter converterId="countryConverter" />
                              <a4j:support event="onchange" reRender="locationPlzNameCountry"
                                   limitToList="true" ajaxSingle="true" />
                         </h:selectOneMenu>
                    </ui:define>
               </s:decorate>
          </a4j:outputPanel>Here the forms_edit.xhtml template:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:s="http://jboss.com/products/seam/taglib">
    
    <div class="formEntry">
        <s:label id="inputLabel">
            <ui:insert name="label" />
        </s:label>
        <s:span styleClass="#{invalid ? 'errors' : ''}" id="input">
            <s:validateAll>
                     <ui:insert name="control"/>
            </s:validateAll>
         </s:span>
         <s:span rendered="#{invalid}" styleClass="errors" id="inputError">
               <br/>
              <s:message styleClass="errorMessage"/>
         </s:span>                 
    </div>
    
</ui:composition>Any help will be greatly appreciated!
 
    