我的forgotpassword.xhtml
视图的结构如下。
<p:outputPanel id="forgotPassword" autoUpdate="true">
<!--Accepting email address-->
<h:form>
<p:outputPanel rendered="#{!vctrl.status && !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 && !secBean.secBeanBlockDisplay && !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
添加了@RequestScoped
和beans
。
更新
所以在访问 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
}
我可以尝试其他任何方式让它发挥作用吗?