这是xhtml页面
这是代码:
<h:form rendered="#{not empty utilisateurs.users}">
<h:dataTable var="item" value="#{utilisateurs.users}" border="1">
<h:column><f:facet name="header">Id</f:facet><h:inputText value="#{item.id}" binding="#{utilisateurs.inputId}"></h:inputText></h:column>
<h:column><f:facet name="header">Nom</f:facet><h:inputText value="#{item.nom}" binding="#{utilisateurs.inputName}"></h:inputText></h:column>
<h:column><f:facet name="header">email</f:facet><h:inputText value="#{item.email}" binding="#{utilisateurs.inputEmail}"></h:inputText></h:column>
<h:column><f:facet name="header">mot de passe</f:facet><h:inputText value="#{item.motDePasse}" binding="#{utilisateurs.inputPass}"></h:inputText></h:column>
<h:column><h:commandButton value="edit" action="#{utilisateurs.update()}" /></h:column>
<h:column><h:commandButton value="delete" action="#{utilisateurs.delete(item)}" /></h:column>
<h:column><h:commandButton value="save" action="#{utilisateurs.save(item)}" /></h:column>
这是托管bean:
@ManagedBean(name="utilisateurs")
@ViewScoped
public class Users {
private HtmlInputText inputId=new HtmlInputText();
private HtmlInputText inputName=new HtmlInputText();
private HtmlInputText inputEmail=new HtmlInputText();
private HtmlInputText inputPass=new HtmlInputText();
private List<Utilisateur>users;
private UtilisateurDaoImpl dao;
private DAOFactory daoFactory;
private Utilisateur user=new Utilisateur();
private Utilisateur newUser=new Utilisateur();
public Utilisateur getNewUser() {
return newUser;
}
public void setNewUser(Utilisateur newUser) {
this.newUser = newUser;
}
private boolean edit;
@PostConstruct
public void init(){
daoFactory=DAOFactory.getInstance();
dao=new UtilisateurDaoImpl(daoFactory);
users=new ArrayList<Utilisateur>();
users=dao.lister();
inputId.setDisabled(true);
inputName.setDisabled(true);
inputEmail.setDisabled(true);
inputPass.setDisabled(true);
}
public void setNewUser(Utilisateur newUser) {
this.newUser = newUser;
}
private boolean edit;
@PostConstruct
public void init(){
daoFactory=DAOFactory.getInstance();
dao=new UtilisateurDaoImpl(daoFactory);
users=new ArrayList<Utilisateur>();
users=dao.lister();
}
public void add() {
dao.creer(user);
users.add(user);
user = new Utilisateur();
}
public void update() {
inputId.setDisabled(false);
inputName.setDisabled(false);
inputEmail.setDisabled(false);
inputPass.setDisabled(false);
}
public void save(Utilisateur user){
dao.update(user);
inputId.setDisabled(true);
inputName.setDisabled(true);
inputEmail.setDisabled(true);
inputPass.setDisabled(true);
}
public void delete(Utilisateur user) {
dao.delete(user);
users.remove(user);
}
问题是,当我点击编辑时,整个数据表输入已启用但我只想启用我编辑的当前行
另外,如果你能提供帮助,我想在数据表的末尾只添加一行,这样我就可以插入一些数据了
答案 0 :(得分:0)
问题是您将相同的UICompon绑定到所有行。你需要改变它。
我建议你看一下:https://www.primefaces.org/showcase/ui/data/datatable/edit.xhtml
使用primefaces或其他lib不是强制性的,只需使用这个想法。
例如,您可以在Utilisateur
类中添加布尔属性,点击“编辑”按钮启用/禁用该行
public class Utilisateur {
//... other code
public boolean editMode;
// getter and setter
}
在每一行中(替换所有输入中的绑定):
<h:inputText value="#{item.id}" readonly="#{!item.editMode}"></h:inputText>
编辑按钮:
<h:commandButton value="Make editable" actionListener="#{utilisateurs.editable(item)}" />
在你的bean中:
public void editable(Utilisateur user) {
for(Utilisateur utilisateur : users) {
utilisateur.setEditMode(false);
}
user.setEditMode(true);
}