Java 当a4j:commandLink和a4j:commandButton不能正常工作时,RichFaces4和JSF2.0出现问题

Java 当a4j:commandLink和a4j:commandButton不能正常工作时,RichFaces4和JSF2.0出现问题,java,jsf,richfaces,Java,Jsf,Richfaces,我有一个简单的登录表单。当我单击Login时,a4j:commandButton运行良好,包含登录表单的地方成为带有注销链接的用户信息。但是,当我单击注销链接时,ajax只显示状态,但如果我再次单击它,则不会发生任何事情,用户将按照我的要求注销 这意味着我必须点击两次才能注销用户???发生了什么事 <a4j:outputPanel id="login_wrapper" ajaxRendered="true"> <h:form id="fm_log

我有一个简单的登录表单。当我单击Login时,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>

用户信息
登录表单 电邮: 密码 记得我吗
  • 忘记密码了?
  • 创建一个帐户。

您有两张表格。当一个表单使用ajax重新呈现另一个表单时,另一个表单的视图状态将丢失。JSF将不会处理表单提交,直到您刷新表单(这是第一次单击所做的,因此第二次单击才起作用)


您需要重新安排ajax重新呈现逻辑,以便一个表单永远不会重新呈现整个另一个表单,而只重新呈现其内容。因此,在另一个
中添加一些包含组件,该组件具有
id
,然后使用提交表单中ajax命令链接/按钮的
重新提交器
属性进行引用。

Hi-Tran。你能展示mAccount.Logout的方法吗?我认为,如果问题只发生在第二次单击时,那么它可能在应用程序逻辑中。