繁体   English   中英

欺诈 <h:datatable> 包含 <h:inputText> 在每一行

[英]CRUD <h:datatable> containing <h:inputText> in each row

这是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);
}

问题是,当我单击“编辑”时,将启用整个数据表输入,但我只想启用正在编辑的当前行

另外,如果您可以帮忙,我只想在数据表的末尾添加一行,这样我也可以插入一些数据

问题是您将相同的UIComponet绑定到所有行 您需要更改此设置。

我建议您对此进行看看: 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM