Проблема с Richfaces 4 и JSF2.0, когда a4j: commandLink и a4j: commandButton не работают должным образом - PullRequest
2 голосов
/ 09 июля 2011

У меня есть простая форма входа.Когда я нажимаю «Войти», a4j: commandButton работает хорошо, и место, где содержится форма «Вход», становится ссылкой «Информация пользователя с выходом из системы».Но когда я нажимаю на ссылку Выход из системы, ajax просто показывает состояние, но ничего не происходит, если я нажимаю на него снова, пользователь выходит из системы именно так, как я хочу

Это значит, что я должен дважды щелкнуть, чтобы выйти из системы ???Что случилось?

<a4j:outputPanel id="login_wrapper" ajaxRendered="true">
                <h:form id="fm_logged" rendered="#{mAccount.loggedIn}">
                    <h3>User Information</h3>
                    <a4j:status name="login_form_status">
                            <f:facet name="start">
                                    <h:graphicImage library="images" name="ajax-loader.gif" />
                            </f:facet>
                    </a4j:status>

                    <h6><h:outputText value="Welcome! #{mAccount.acc.name}" /></h6>
                        <ul class="list1">
                        <li><h:link value="User Account Control" outcome="/pages/management/buyer_home" style="text-decoration:none;"></h:link></li>
                        <li><a4j:commandLink id="logout" status="login_form_status" actionListener="#{mAccount.Logout}" value="Logout" style="text-decoration:none;"></a4j:commandLink></li>
                        </ul>
                </h:form>           
                <h:form id="login-form" class="login-form" rendered="#{!mAccount.loggedIn}" >
                    <h3>Login Form</h3> 
                    <a4j:status name="login_form_status">
                            <f:facet name="start">
                                    <h:graphicImage library="images" name="ajax-loader.gif" />
                            </f:facet>
                    </a4j:status>                       
                    <h:outputText value="Wrong username or password" rendered="#{mAccount.wrongUsername}" style="color:red;" />
                    <fieldset>
                        <div class="field">
                            <label>Email: </label><h:inputText value="#{mAccount.acc.email}" /> 
                        </div>
                        <div class="field">
                            <label>Password</label><h:inputSecret value="#{mAccount.acc.password}" /> 
                        </div>
                        <div class="field">
                            <label class="alt">Remember me</label><h:selectBooleanCheckbox value="#{mAccount.rememberMe}" />
                        </div>

                        <ul>
                            <li><h:link outcome="forgot_password">Forgot your password?</h:link>
                            </li>
                            <li><h:link outcome="registration">Create an account.</h:link>
                            </li>
                        </ul>

                        <div class="wrapper">
                            <a4j:commandButton id="login" status="login_form_status" value="Login" actionListener="#{mAccount.Login}"> </a4j:commandButton>
                        </div>
                    </fieldset>
                </h:form>
            </a4j:outputPanel>

1 Ответ

3 голосов
/ 11 июля 2011

У вас есть 2 формы.Когда одна форма повторно отображает другую форму, используя ajax, состояние просмотра другой формы теряется.JSF не будет обрабатывать отправку формы до тех пор, пока вы не обновите форму (это то, что делает первый щелчок, и, следовательно, второй щелчок просто работает).

Вам необходимо изменить логику повторного рендеринга ajax так,одна форма никогда не перерисовывает всю другую форму, а только ее содержимое.Итак, добавьте один содержащий компонент внутри другого <h:form> с id, на который вы затем ссылаетесь, используя атрибут reRender ссылки / кнопки команды ajax из формы отправки.

...