JSF p:密码验证和反馈仅在重新加载页面后起作用

时间:2014-02-19 19:18:51

标签: java ajax jsf primefaces passwords

我正在写一个用户可以更改密码的页面。首先,他需要输入旧密码并调用验证器。当密码正确时,两个密码字段都会启用,他可以输入新密码并需要重复密码。
我正在使用primefaces 4.0中的p:password组件。
在他可以输入新密码的第一个密码字段中,我有一个属性feedback =“true”。这里的问题是,当我第一次呼叫网站时,没有反馈输出。它仅在我重新加载页面并再次输入密码字段时出现 此外,不调用密码字段的验证器validatePwd1 在重复密码字段中,我对验证器有同样的问题。

在页面加载ajax之后是否可以仅重新加载这两个组件?或者有更好的方法来解决此错误?

这是我的页面:

                                  <p:row id="RowConfirmOldPw" rendered="#{userSettingBean.showPasswordFields}">

                                        <p:column>
                                            <p:outputLabel value="#{msg['usersett_account_oldPwd']}"/>
                                        </p:column>
                                        <p:column>
                                            <p:password id="oldPwd" value="#{userSettingBean.oldPassword}" >
                                                <f:validator validatorId="passwordEqualValidator"/>
                                                <f:ajax event="keyup" render="oldPwdMessage pwd1 pwd2"/>
                                            </p:password>
                                            <p:watermark for="oldPwd" value="#{msg['usersett_account_oldPwd']}"/>

                                        </p:column>

                                        <p:column>
                                            <p:message id="oldPwdMessage" for="oldPwd"/>
                                        </p:column>
                                    </p:row>



                                    <p:row id="RowTypeNewPassword">

                                        <p:column>
                                            <p:outputLabel value="#{msg['usersett_account_newPwd']}"/>
                                        </p:column>
                                        <p:column>
                                            <p:password id="pwd1" value="#{userSettingBean.password1}" 
                                            disabled="#{userSettingBean.disableNewPassword}" feedback="true" validator="#{userSettingBean.validatePwd1}">
                                                <f:ajax event="keyup" render="pwdMatchMessage"/>
                                            </p:password>
                                        </p:column>
                                    </p:row>

                                    <p:row>
                                        <p:column>
                                            <h:outputLabel value="#{msg['usersett_account_reenter']}"/>
                                        </p:column>

                                        <p:column>
                                            <p:password id="pwd2" value="#{userSettingBean.password1}" 
                                            disabled="#{userSettingBean.disableNewPassword}" validator="#{userSettingBean.validateMatch}">
                                                <f:ajax event="keyup" render="pwdMatchMessage buttonSaveAccount"/>
                                            </p:password>

                                        </p:column>

                                        <p:column>
                                            <h:message id="pwdMatchMessage" for="pwd2"/>
                                        </p:column>
                                    </p:row>

1 个答案:

答案 0 :(得分:0)

我现在解决了这个问题 当你使用primefaces时,你总是必须采取 <p:ajax>标记。在我的代码中,我也使用了<f:ajax> 这两个标签不能一起使用。
当我用<f:ajax>替换<p:ajax>代码时,它就有效了!