因此,我从正在保存到对象的表单中获取密码值。对象将保存到数据表中。我具有允许用户从数据表中选择行的功能,并且该对象的值将填充回表单中。不幸的是,除密码字段外,所有值都将填充。如果我将密码字段更改为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();
}
}
答案 0 :(得分:1)
显示密码的风险很高,如果您将查看Primeface <p:password />
,它是JSF <h:inputSecret />
的扩展名。
它默认有一个名为redisplay
的属性,其值应为false
布尔标志,指示先前输入的密码 应该以表格形式呈现。默认为false。
现在在您的组件中添加此属性(redisplay="true"
)。
有关详细信息,请查看Tag inputSecret
将组件的clientId渲染为“name”的值 属性。将组件的当前值渲染为值 “value”属性,当且仅当“重新显示”组件时 attribute是字符串“true”。如果是“styleClass”属性 指定,将其值作为“class”属性的值。