【问题标题】:Passwords are not updated after a newly generated password is selected选择新生成的密码后,密码不会更新
【发布时间】:2012-10-04 22:03:16
【问题描述】:

我有一个密码确认组件。用户可以手动输入两个密码,也可以生成一对。生成的密码显示在选择列表中。从列表中选择密码时,应使用此密码更新两个输入密码。问题是输入密码没有反映选择密码后的更改。

密码确认组件:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

    <h:outputText value="#{eval.getString(name)}: #{mandatory ? '*' : ''}"/>   
    <h:panelGrid columns="3">               
        <h:column>
            <p:password id="psw1"
                value="#{eval.evaluateAsBean(beanName).password}" feedback="false"
                disabled="#{not enabled}" />
        </h:column>
        <h:column>
            <p:commandButton value="#{label.create}" disabled="#{not enabled}"
                action="#{eval.evaluateAsBean(beanName).generate}"
                update="generated">
            </p:commandButton>
        </h:column>
        <h:column>
            <p:selectOneMenu id="generated"
                disabled="#{not enabled}"
                value="#{eval.evaluateAsBean(beanName).selectedPassword}">
                <f:selectItems value="#{eval.evaluateAsBean(beanName).passwords}"
                    var="val" itemLabel="#{val}" itemValue="#{val}" />
                    <p:ajax listener="#{eval.evaluateAsBean(beanName).passwordChanged}"
                        update="psw1, psw2" />
            </p:selectOneMenu>
        </h:column>
        <h:column>
            <p:password id="psw2"
                value="#{eval.evaluateAsBean(beanName).confirmedPassword}"
                feedback="false" disabled="#{not enabled}" />
        </h:column>
        <h:column>
            <h:outputText value="" />
        </h:column>
        <h:column>
            <h:outputText value="" />
        </h:column>
    </h:panelGrid>
</ui:composition>

passwordChanged 监听器:

public void passwordChanged() {
    this.password = selectedPassword;
    this.confirmedPassword = selectedPassword;
}

编辑1

我已从p:ajax 中删除更新属性并将passwordChanged 侦听器更改为:

public void passwordChanged() {
    this.password = selectedPassword;
    this.confirmedPassword = selectedPassword;
    RequestContext.getCurrentInstance().update("form:tabs:editorsGroup:editor:psw1");
    RequestContext.getCurrentInstance().update("form:tabs:editorsGroup:editor:psw2");
}

使用 Firebug,psw1 的 id 为:form:tabs:9:editorsGroup:4:editor27:psw1。还是不行。

【问题讨论】:

  • 我为这两个密码添加了styleClass,并将update更改为update="@(.psw1) @(.psw2)"。在浏览器的控制台中,我得到:Error: Syntax error, unrecognized expression: .psw1) @(.psw2
  • 您能否确认passwordChanged() 方法已成功执行?
  • 是的,我确认passwordChanged方法执行成功。
  • 我正在使用 PrimeFaces 3.4、Mojarra 2.0.9、Tomcat 7.0.30。
  • 你的managed bean范围是什么?

标签: java jsf jsf-2 primefaces


【解决方案1】:

出于明显的安全原因,&lt;p:password&gt;(和&lt;h:inputSecret&gt;)默认情况下不会重新显示模型中的值。

要关闭此安全功能,请设置redisplay="true"(这也适用于&lt;h:inputSecret&gt;)。

<p:password ... redisplay="true" />

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多