我想为项目分配一个资源列表,然后我使用selectManyCheckbox:
问题是我选择了2个资源。它返回一个空的资源列表(Utilisateur),但项目已成功添加:
然后这是我的xhtml文件:
<p:dataTable id="dta" value="#{UtilisateurComponent.listUtilisateurs()}" var="current" rows="15" paginator="true" paginatorPosition="bottom">
<p:column>
<h:selectManyCheckbox id="selectUser" value="#{ProjetComponent.projet.utilisateurs}" >
<f:selectItem var="utilisateurs" value="#{utilisateurs.iduser}" itemLabel=""/>
<f:converter converterId="entityConverter" />
</h:selectManyCheckbox>
</p:column>
</p:dataTable>
</h:panelGrid>
<h:panelGroup>
<p:commandButton image="save" ajax="false" style="margin-right:20px;" value="#{projetmsgs['navigation.save']}" action="#{ProjetComponent.saveProjetUtilisateurs1(ProjetComponent.projet,ProjetComponent.projet.utilisateurs)}"/>
</h:panelGroup>
</p:panel>
这是保存在ProjetComponent中的方法:
private Projet projet;
private Utilisateur utilisateurs;
@Autowired
private ProjetDAO projetDAO;
@Autowired
private UtilisateurDAO utilisateurDAO;
@Autowired
private ProjetService projetService;
@Transactional
public String saveProjetUtilisateurs1(Projet p, List<Utilisateur> utilisateur) {
projet = projetService.saveProjetUtilisateurs(p, utilisateur);
return "/jsf/projet/viewProjet.xhtml";
}
这个方法保存在由ProjetCompnent组件调用的ProjetService类中:
@Transactional
public Projet saveProjetUtilisateurs(Projet projet,List<Utilisateur> ut)
{
projet.setAvancement(projet.getAvancement());
projet.setConfidentialite(projet.getConfidentialite());
projet.setDatedebut(projet.getDatedebut());
projet.setDatefineffective(projet.getDatefineffective());
projet.setDatefinprevu(projet.getDatefinprevu());
projet.setDescription(projet.getDescription());
projet.setDurreprojet(projet.getDurreprojet());
projet.setNomprojet(projet.getNomprojet());
projet.setObjectifprojet(projet.getObjectifprojet());
projet.setStatut(projet.getStatut());
projet.setUtilisateurs(ut);
projet = projetDAO.store(projet);
projetDAO.flush();
return projet;
}
这是Projet实体:
@Entity
public class Projet implements Serializable {
@Id
private Integer idprojet;
@ManyToMany(mappedBy = "projets", fetch = FetchType.LAZY)
java.util.List<com.gestion.projet.domain.Utilisateur> utilisateurs;
}
答案 0 :(得分:0)
如果您希望在Primeface Datatable上基于Checkbox进行多项选择,则无需使用显式h:selectManyCheckbox
。
您可以通过在第一个/最后一个selectionMode="multiple"
上指定p:column
属性来实现此目的。