Primefaces:Ajax渲染p:commandButton没有使用actionListener

时间:2017-03-21 12:04:55

标签: java ajax jsf primefaces

我的forgotpassword.xhtml视图的结构如下。

<p:outputPanel id="forgotPassword" autoUpdate="true">
    <!--Accepting email address-->
    <h:form>
        <p:outputPanel rendered="#{!vctrl.status &amp;&amp; !vctrl.accountLocked}">
            <div class="row">
                <div class="input-field s12">
                    <h:inputText id="emailAddress" value="#{vctrl.emailAddress}" size="35"/>
                </div>
                <div class="col s12 btn-col">
                    <p:commandButton value="Submit" styleClass="waves-effect waves-light btn btn-med" 
                        update=":forgotPassword" actionListener="#{vctrl.checkIfEmailExists}" />
                    <p:commandButton value="Cancel" styleClass="waves-effect waves-light btn btn-med red darken-4"
                        immediate="true" style="float:right" action="#{vctrl.logout}" />
                </div>
            </div>
        </p:outputPanel>
    </h:form>
    <!--checking for security question and answer-->
    <h:form>
        <p:outputPanel rendered="#{vctrl.status &amp;&amp; !secBean.secBeanBlockDisplay &amp;&amp; !vctrl.accountLocked}">
            <div class="row">
                <div class="input-field s12">
                    <h:inputSecret id="secBeanAns1" value="#{secBean.secBeanAnswer1}"/>
                </div>
                <div class="input-field s12">
                    <h:inputSecret id="secBeanAns2" value="#{secBean.secBeanAnswer2}"/>
                </div>
                <div class="col s12 btn-col">
                    <p:outputPanel>
                        <p:commandButton value="Submit" update=":forgotPassword"
                            data="#{vctrl.emailAddress}"
                            actionListener="#{secBean.checksecBeanQuestionsAndResetPass}"
                            oncomplete="setFocus();showpopup();"
                            styleClass="waves-effect waves-light btn btn-med" />
                        <p:commandButton value="Cancel"
                            action="#{vctrl.logout}"
                            styleClass="waves-effect waves-light btn btn-med red darken-4"
                            immediate="true" style="float:right" />
                    </p:outputPanel>
                </div>
            </div>
        </p:outputPanel>
        <p:outputPanel rendered="#{secBean.secBeanBlockDisplay}">
            <div id="reloginpopup" class="modal" style="top: 35%">
                <div class="modal-content">
                </div>
            </div>
        </p:outputPanel>
    </h:form>
</p:outputPanel>

用户输入其电子邮件地址后,将显示第二个表单中的下一个ajax视图。但是,呈现element的内部按钮并未按预期提交。它根本没有达到actionListner方法 - checksecBeanQuestionsAndResetPass。它只是重新加载页面并呈现forgotPassword初始视图。

我的问题是,通过p:commandButton呈现时,ajax是否有效?我浏览了 this post ,根据答案,p:commandButton应该包含在已渲染的元素中。对我来说,form最初将是rendered,在其中加载其余内容以解决安全问题。所以这应该像预期的那样。但完全没有想法,因为这不是为了调用bean方法。还有其他什么要配置吗?

修改

我还在@ManagedBean添加了@RequestScopedbeans

更新

所以在访问 post 1 post 2 post 3 等之后,仍然无法提及#39; t让这个工作。我的bean方法根本就没有被调用过。以下是我在commandButton html

中更新rendered的方式
<p:commandButton value="Submit" immediate="true"
    update=":forgotPassword"
    actionListener="#{secBean.checkSecurityQuestionsAndResetPass}"
    process="@this"
    data="#{vctrl.emailAddress}"
    styleClass="waves-effect waves-light btn btn-med" />
<p:commandButton value="Cancel" immediate="true"
    actionListener="#{vctrl.logout}"
    styleClass="waves-effect waves-light btn btn-med red darken-4"
    style="float:right"/>

我的bean方法如下:

public void checkSecurityQuestionsAndResetPass(ActionEvent event) {
        String emailAddress = (String) event.getComponent().getAttributes()
                .get("data");
        //some processing
}

我可以尝试其他任何方式让它发挥作用吗?

0 个答案:

没有答案