密码字段<p:密码>保存后不会在表单中重新显示值并从数据表中选择该行

时间:2016-03-13 03:43:22

标签: jsf primefaces xhtml

因此,我从正在保存到对象的表单中获取密码值。对象将保存到数据表中。我具有允许用户从数据表中选择行的功能,并且该对象的值将填充回表单中。不幸的是,除密码字段外,所有值都将填充。如果我将密码字段更改为inputText,则在从数据表中选择行后将显示该值。下面是代码。感谢。

HTML                                     客户注册                                                                                                           

            <p:panelGrid columns="2">
                <p:commandButton value="Submit" image="ui-icon-check" ajax="false" actionListener="#{createPerson.createPerson()}"/>
            </p:panelGrid><br/>
            <p:panel id="table">
            <p:dataTable id="dataTable" editable="false" var="person" paginator="true" rows="5" selectionMode="single"
                         value="#{createPerson.dataModel}" rowKey="#{person.id}">
        <f:facet name="header">  
            Record 
        </f:facet>  
            <p:ajax listener="#{createPerson.processUserSelection}" event="rowSelect" update=":createPersonForm"/>
            <p:ajax listener="#{createPerson.processUserUnselection}" event="rowUnselect" update=":createPersonForm"/>

            <p:column sortBy="id" headerText="ID">  
            <h:outputText value="#{person.id}" />  
            </p:column>  

            <p:column sortBy="ssn" headerText="SSN">  
            <h:outputText value="#{person.ssn}" />  
            </p:column>  

           </p:dataTable>
        </p:panel>
        </h:form>
    </h:body>
</html>

public class Person {
    private String ssn;
    private String id;

    public String getSsn() {
        return ssn;
    }

    public void setSsn(String ssn) {
        this.ssn = ssn;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

创建人

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

@ManagedBean(name = "createPerson")
@SessionScoped
public class CreatePerson {
    private Person person;
    List<Person> personList = new ArrayList<>();
    private PersonDataModel dataModel;
    private static int id = 0;

    public CreatePerson() {
        person = new Person();
        dataModel = new PersonDataModel(personList);
    }

    public String getSsn() {
        return person.getSsn();
    }

    public void setSsn(String ssn) {
        person.setSsn(ssn);
    }

    public void createPerson(){
        System.out.println(" Submit Button clicked..");
        System.out.println(" SSN: " + person.getSsn());
        if (person.getId() == null || person.getId().equalsIgnoreCase("-1")) {
            //New Person
            person.setId("" + (id++));
            personList.add(person);
            person = new Person(); 
            person.setId("-1");
        }
        else {
        }

    }

    public void processUserSelection(SelectEvent evt) {
        System.out.println(" Row selected from the Data Table .");
        this.person = (Person) evt.getObject();
    }

    public void processUserUnselection(UnselectEvent evt) {
        System.out.println(" Row unselected from the Data Table .");
        this.person = new Person();
        this.person.setId("-1");
    }

    public PersonDataModel getDataModel(){
        return this.dataModel;
    }
}

数据表类

import java.util.List;
import javax.faces.model.ListDataModel;
import org.primefaces.model.SelectableDataModel;

public class PersonDataModel extends ListDataModel<Person> implements SelectableDataModel<Person>{

    public PersonDataModel() {
    }

    public PersonDataModel(List<Person> data) {
        super(data);
    }

    @Override
    public Person getRowData(String rowKey){

        System.out.println("Key = " + rowKey);
        List<Person> persons = (List<Person>) getWrappedData();

        for (Person person : persons) {
            if(person.getId().equals(rowKey)){
                return person;
            }
        }

        System.out.println("Valid Person not found");

        return null;
    }

    @Override
    public Object getRowKey(Person person){
        return person.getId();
    }
}

1 个答案:

答案 0 :(得分:1)

显示密码的风险很高,如果您将查看Primeface <p:password />,它是JSF <h:inputSecret />的扩展名。 它默认有一个名为redisplay的属性,其值应为false

  

布尔标志,指示先前输入的密码   应该以表格形式呈现。默认为false。

现在在您的组件中添加此属性(redisplay="true")。

有关详细信息,请查看Tag inputSecret

  

将组件的clientId渲染为“name”的值   属性。将组件的当前值渲染为值   “value”属性,当且仅当“重新显示”组件时   attribute是字符串“true”。如果是“styleClass”属性   指定,将其值作为“class”属性的值。