Take a look at the codes:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<ui:define name="titulo">Cadastro de Usuário</ui:define>
<ui:define name="corpo">
<h:form>
<h1>Cadastro Usuário</h1>
<f:metadata>
<o:viewParam name="usuario" value="#{cadastroUsuarioBean.usuario}"/>
<f:event listener="#{cadastroUsuarioBean.inicializar}" type="preRenderView" />
</f:metadata>
<p:messages autoUpdate="true" closable="true"/>
<p:toolbar>
<p:toolbarGroup>
<p:button value="Novo" outcome="CadastroUsuario"/>
<p:commandButton value="Salvar" id="botaoSalvar" action="#{cadastroUsuarioBean.salvar}" update="@form"/>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="pesquisa"/>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel" style=" width: 100%; margin-top: 20px" columnClasses="rotulo, campo" >
<p:outputLabel value="Nome" for="nome"/>
<p:inputText id="nome" size="60" maxlength="80" value="#{cadastroUsuarioBean.usuario.nome}"/>
<p:outputLabel value="E-mail" for="email"/>
<p:inputText id="email" size="60" maxlength="80" value="#{cadastroUsuarioBean.usuario.email}"/>
<p:outputLabel value="Senha" for="senha"/>
<p:password id="senha" value="#{cadastroUsuarioBean.usuario.senha}"/>
<p:selectOneMenu >
<f:selectItem itemLabel="Auxiliar"/>
<f:selectItem itemLabel="Vandedor"/>
<f:selectItem itemLabel="Administradores"/>
</p:selectOneMenu>
<p:commandButton value="Adicionar grupo"/>
</p:panelGrid>
<p:dataTable value="#{pesquisaClienteBean.itens}" var="item" id="tabelaItens" style="margin-top: 20px">
<p:column headerText="Grupo" style="text-align: left">
<h:outputText value="Vendedor"/>
</p:column>
<p:column style="width: 100px; text-align: center">
<p:commandButton icon="ui-icon-trash" title="Excluir" oncomplete="PF('comfirmacaoExclusao').show();"/>
</p:column >
</p:dataTable>
<p:confirmDialog header="Exclusao Usuário" message="Tem certeza que deseja excluir Usuário"
widgetVar="comfirmacaoExclusao">
<p:button value="Não" onclick="PF('comfirmacaoExclusao').hide(); return false;"/>
<p:commandButton value="Sim" oncomplete="PF('comfirmacaoExclusao').hide();"/>
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
User RegistrationBean.java
@Named
@ViewScoped
public class CadastroUsuarioBean implements Serializable {
private static final long serialVersionUID = 0L;
private Usuario usuario;
private Grupo grupoSelecionado;
private List<Grupo> grupo = new ArrayList<Grupo>();
@Inject
private CadastroUsuarioService cadastroUsuarioService;
@Inject
private Grupos grupos;
public CadastroUsuarioBean() {
limpar();
}
public void inicializar() {
grupo = grupos.grupos();
grupoSelecionado = new Grupo();
}
public void limpar() {
usuario = new Usuario();
grupo = new ArrayList<Grupo>();
}
public void salvar() {
adicionarGrupo();
this.usuario = cadastroUsuarioService.salvar(this.usuario);
limpar();
FacesUtil.addInfoMessage("Usuario cadastro com sucesso!");
}
public void adicionarGrupo() {
this.usuario.getGrupos().add(grupoSelecionado);
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public List<Grupo> getGrupo() {
return grupo;
}
public Grupo getGrupoSelecionado() {
return grupoSelecionado;
}
public void setGrupoSelecionado(Grupo grupoSelecionado) {
this.grupoSelecionado = grupoSelecionado;
}
}
CadastroUSuaroService.java
public class CadastroUsuarioService implements Serializable {
private static final long serialVersionUID = 0L;
@Inject
private Usuarios usuarios;
@Transactional
public Usuario salvar(Usuario usuario) {
Usuario usuarioExistente = usuarios.porId(usuario.getId());
if (usuarioExistente != null && !usuarioExistente.equals(usuario)) {
throw new NegocioException("Já existe um usuario informado.");
}
return usuarios.guardar(usuario);
}
}
UserConverter.java
@FacesConverter(forClass = Usuario.class)
public class UsuarioConverter implements Converter {
@Inject
private Usuarios usuarios;
public UsuarioConverter() {
usuarios = CDIServiceLocator.getBean(Usuarios.class);
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Usuario retorno = null;
if (StringUtils.isNotBlank(value)) {
retorno = (Usuario) this.usuarios.filtrados(new UsuarioFilter());
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Long id = ((Usuario) value).getId();
String retorno = (id == null ? null : id.toString());
return retorno;
}
return "";
}
}
Users.java repository
public class Usuarios implements Serializable {
private static final long serialVersionUID = 0L;
@Inject
private EntityManager manager;
public Usuario guardar(Usuario usuario) {
return manager.merge(usuario);
}
@Transactional
public void remover(Usuario usuario) {
try {
usuario = porId(usuario.getId());
manager.remove(usuario);
manager.flush();
} catch (PersistenceException e) {
throw new NegocioException("Usuario " + usuario.getNome() + " não pode ser excluído.");
}
}
/*public Usuario porId(Long id) {
return manager.find(Usuario.class, id);
}*/
public Usuario porId(Long id) {
try {
return manager.createQuery("from Usuario where id = :id", Usuario.class).setParameter("id", id).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public Usuario porNomeOuEmail(String nome, String email) {
try {
return manager.createQuery("from Usuario where upper(nome) = :nome and email = :email", Usuario.class)
.setParameter("nome", nome.toUpperCase())
.setParameter("email", email.toUpperCase())
.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public Usuario porEmail(String email) {
try {
return manager.createQuery("from Usuario where upper(email) = :email", Usuario.class)
.setParameter("email", email.toUpperCase())
.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@SuppressWarnings("unchecked")
public List<Usuario> filtrados(UsuarioFilter filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Usuario.class);
if (StringUtils.isNotBlank(filtro.getNome())) {
criteria.add(Restrictions.ilike("nome", filtro.getNome(), MatchMode.ANYWHERE));
}
return criteria.addOrder(Order.asc("nome")).list();
}
}
repository groups.java
public class Grupos implements Serializable {
private static final long serialVersionUID = 0L;
@Inject
private EntityManager manager;
public List<Grupo> grupos(){
return manager.createQuery("FROM Grupo",Grupo.class).getResultList();
}
public Grupo porId(Long id) {
return this.manager.find(Grupo.class, id);
}
public Grupo grupoPorNome(String nome)
{
try
{
return manager.createQuery("from Grupo where upper(nome) = :nome", Grupo.class)
.setParameter("nome", nome.toUpperCase())
.getSingleResult();
}
catch (NoResultException e)
{
return null;
}
}
}
User SearchBean.java
@Named @ViewScoped public class SearchUsersBean implements Serializable {
private static final long serialVersionUID = 0L;
@Inject
private Usuarios usuarios;
private final UsuarioFilter filtro;
private List<Usuario> usuariosFiltrados;
private Usuario usuarioSelecionado;
public PesquisaUsuariosBean() {
filtro = new UsuarioFilter();
}
public void excluir() {
usuarios.remover(usuarioSelecionado);
usuariosFiltrados.remove(usuarioSelecionado);
FacesUtil.addInfoMessage("Usuario" + usuarioSelecionado.getId() + "excluido com sucesso");
}
public void pesquisar() {
usuariosFiltrados = usuarios.filtrados(filtro);
}
public UsuarioFilter getFiltro() {
return filtro;
}
public List<Usuario> getUsuariosFiltrados() {
return usuariosFiltrados;
}
public Usuario getUsuarioSelecionado() {
return usuarioSelecionado;
}
public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
this.usuarioSelecionado = usuarioSelecionado;
}
}
User Search.xhtml
<ui:define name="corpo">
<h:form >
<h1>Pesquisa Usuarios</h1>
<p:messages autoUpdate="true" closable="true"/>
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup style="padding: 4px">
<p:commandButton value="Pesquisar" action="#{pesquisaUsuariosBean.pesquisar}"
update=" @form " />
</p:toolbarGroup>
<p:toolbarGroup align="right" style="padding: 4px">
<p:button value="Novo" outcome="/usuarios/CadastroUsuario" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid id="painel" columns="2" style="width: 100%; margin-top: 20px" columnClasses="rotulo,campo">
<p:outputLabel value="Nome" for="nome"/>
<p:inputText id="nome" style="width: 50%" value="#{pesquisaUsuariosBean.filtro.nome}"/>
</p:panelGrid>
<p:dataTable value="#{pesquisaUsuariosBean.usuariosFiltrados}" var="usuario" id="tabelaUsuarios" style="margin-top: 20px"
emptyMessage="Nenhum Usuario Encontrado" rows="20" paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom">
<p:column headerText="Nome" style="text-align: left">
<h:outputText value="#{usuario.nome}"/>
</p:column>
<p:column headerText="E-mail" style="text-align: left">
<h:outputText value="#{usuario.email}"/>
</p:column>
<p:column style="width: 100px;text-align: center">
<p:button icon="ui-icon-pencil" title="Editar" style="margin: 5px"
outcome="/usuarios/CadastroUsuario">
<f:param name="usuario" value="#{usuario.id}"/>
</p:button>
<p:commandButton icon="ui-icon-trash" title="Excluir" oncomplete="PF('confirmacaoExclusao').show()" process="@this"
update=":confirmacaoExclusaoDialog">
<f:setPropertyActionListener target="#{pesquisaUsuariosBean.usuarioSelecionado}" value="#{usuario}"/>
</p:commandButton>
</p:column >
</p:dataTable>
<p:confirmDialog header="Exclusão de produto" message="Tem certeza que deseja excluir o produto #{pesquisaUsuariosBean.usuarioSelecionado.nome} ?"
widgetVar="confirmacaoExclusao" id="confirmacaoExclusaoDialog">
<p:button value="Não" onclick="PF('confirmacaoExclusao').hide(); return false;" />
<p:commandButton value="Sim" oncomplete="PF('confirmacaoExclusao').hide();"
action="#{pesquisaUsuariosBean.excluir}" process="@this" update="@from"/>
</p:confirmDialog>
</h:form>