views:

25

answers:

0

Hi all. Have a quit strange behaviour of f:ajax.

Scenario: registration form with 2 step registration 1. user fill base info (name, email, phone) and send it - email sending to user - user confirm his email - by clicking on link he comes to the same page but now he have many fields to fill 2. user fill all fields, but f:ajax not working (for validation)

structure : page have to panels, in on of it specific ui component situated (all fields for use at step 2)

....
Registration Page
        <h:form>

            <f:ajax render="@form" execute="registerPanel doolop donePanel">
                <h:panelGrid id="registerPanel" columns="3" rendered="#{partnerTempRegisration.processToTemp}">
.....
  <h:panelGroup id="doolop" rendered="#{partnerTempRegisration.submited}">
                    Registrated!
                </h:panelGroup>

 </f:ajax>
<h:panelGroup id="donePanel" rendered="#{partnerTempRegisration.forRegistration}" >

                <h:panelGroup rendered="#{partnerTempRegisration.aboutToRegistrate}">
                    Continue registration!
                    <hydra:pregistration />
                </h:panelGroup>

                <h:panelGroup rendered="#{!partnerTempRegisration.aboutToRegistrate}">
                    Could not be registrated!
                </h:panelGroup>

            </h:panelGroup>

partnerTempRegisration.processToTemp - check if link hase parameter hash (registration.xhtml?hash=XXXX)

ui component (hydra:pregistration):

<cc:implementation>
<f:ajax render="@form" execute="register_official register_trade register_contact register_advertising">
<h:form >
<p:panel id="register_official" header="#{i18n.register_official_title}" styleClass="panel_text" >


    <f:validateRequired >

        #{i18n.register_official_full_name_enterprise}
        <h:panelGrid columns="2" styleClass="register_grid">

            <h:outputText value="#{i18n.register_input_ru_ru}" styleClass="register_cell"/>

            <h:panelGroup styleClass="register_cell" layout="block">
                <h:inputText id="official_full_name_ru_ru" styleClass="register_fields"
                             requiredMessage="#{i18n.register_required}"
                             value="#{partnerRegistration.official_full_name_ru_ru}"/>
                <h:message for="official_full_name_ru_ru" errorClass="error_message"/>
            </h:panelGroup>
.....


    </f:validateRequired>
</p:panel>
...

<h:commandButton action="#{partnerRegistration.submitRegistration}" value="submit"  disabled="#{!partnerRegistration.filled}"/>

</h:form>
</f:ajax>
</cc:implementation>

Problem : ajax not woking in a case of step 2, but if I am put hydra:pregistration in the place where it would be rendered by default - it works as expected.

Q1: is this is some kind of jsf 2.0 life cycle rules? Q2: is there is some design for this situation (on the same page, I know that i can just put it on another)? Q3: what you could propose to do in this situation ?

Thank you!