Olá, pessoal. Estou criando um sistema que possui a função de cadastro de usuários. Na tela de pesquisa tenho um SelectOneRadio para selecionar se o cadastro a ser pesquisado está em status “ativo” ou “inativo”. Aqui está uma imagem da tela:
A ideia é a seguinte: os cadastros existentes no sistema podem estar em status “ativo” ou “inativo”. Antes de pesquisar, o usuário do sistema vai selecionar se deseja pesquisar os cadastros com status “ativo” ou “inativo”. e digitar o nome do usuário que deseja pesquisar e clicar em Pesquisar.
Mas a minha dificuldade é como tratar qual dos RadioButtons está marcado. Acredito que devo usar um if…else, mas como e em qual arquivo que devo implementar o código? No meu programa, tenho 4 arquivos que atuam nesta página: CadastroUsuario.xhtml, CadastroUsuarioBean.java, UsuariosRep.java e UsuarioFilter.java.
Estou postando o código de cada arquivo:
PesquisaUsuario.xhtml
<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">
<ui:define name="titulo">Pesquisar Usuarios</ui:define>
<ui:define name="corpo">
<h:form id="frmPesquisa">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<h1>Pesquisa de usuários</h1>
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:commandButton value="Pesquisar" action="#{pesquisaUsuarioBean.pesquisar}" update="@form" />
</p:toolbarGroup>
<p:toolbarGroup align ="right">
<p:button value="Novo" outcome="/usuarios/CadastroUsuario"/>
</p:toolbarGroup>
<p:toolbarGroup>
<p:outputLabel>Status do usuário : </p:outputLabel>
// este é o SelectOneRadio em questão
<p:selectOneRadio id="atividade" value="#{radioView.console}">
<f:selectItem itemLabel="Ativo" itemValue="Ativo" />
<f:selectItem itemLabel="Inativo" itemValue="Inativo" />
</p:selectOneRadio>
</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="#{pesquisaUsuarioBean.filtro.nome}"/>
</p:panelGrid>
<p:dataTable id="usuariosTable"
value="#{pesquisaUsuarioBean.usuariosFiltrados}" var="usuario"
style="margin-top: 20px" emptyMessage="Nenhum usuario encontrado."
rows="20" paginator="true" paginatorAlwaysVisible="false"
paginatorPosition="bottom">
<p:column headerText="Id" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.id}" />
</p:column>
<p:column headerText="Nome" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.nome}" />
</p:column>
<p:column headerText="RG" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.rg}" />
</p:column>
<p:column headerText="CPF" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.cpf}" />
</p:column>
<p:column headerText="Email" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.email}" />
</p:column>
<p:column headerText="Telefone" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.telefone}" />
</p:column>
<p:column headerText="Endereço" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.endereco}" />
</p:column>
<p:column headerText="Estado" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.estado}" />
</p:column>
<p:column headerText="CEP" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.cep}" />
</p:column>
<p:column headerText="Status" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.status}" />
</p:column>
<p:column headerText="Operações" style="width: 100px; text-align: center">
<p:button action="#{pesquisaUsuarioBean.verificarStatus}" icon="ui-icon-pencil" title="Editar">
<f:param name="usuario" value="#{usuario.id}" />
</p:button>
<p:commandButton icon="ui-icon-bloquear" title="Alterar status do cadastro" oncomplete="PF('confirmacaoExclusao').show()" process="@this" update="frmPesquisa:confirmacaoExclusaoDialog">
<f:setPropertyActionListener value="#{usuario}" target="#{pesquisaUsuarioBean.usuarioSelecionado}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog header="Alterar status do cadastro"
message="Tem certeza que deseja alterar o status do cadastro do usuário #{pesquisaUsuarioBean.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="#{pesquisaUsuarioBean.excluir}" process="@this" update="frmPesquisa:usuariosTable"/>
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
Vocês podem ver que coloquei um comentário “este é o SelectOneRadio em questão”.
PesquisaUsuarioBean.java
package com.sisRastrbov.controller;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import com.sisRastrbov.model.Usuario;
import com.sisRastrbov.repository.UsuariosRep;
import com.sisRastrbov.repository.filter.UsuarioFilter;
import com.sisRastrbov.services.CadastroUsuarioService;
import com.sisRastrbov.services.NegocioException;
@Named
@ViewScoped
public class PesquisaUsuarioBean implements Serializable{
private static final long serialVersionUID = 1L;
@Inject
private UsuariosRep usuarios;
private UsuarioFilter filtro;
private List<Usuario> usuariosFiltrados;
private Usuario usuarioSelecionado;
@Inject
private CadastroUsuarioService cadastroUsuarioService;
public PesquisaUsuarioBean() {
filtro = new UsuarioFilter();
}
public boolean isInativo() {
boolean inativo = false;
for (int x = 0;x < this.usuariosFiltrados.size(); x++)
{
String ContasInativas = this.usuariosFiltrados.get(x).getStatus();
if ( ContasInativas.equals("Inativo"))
{
inativo = true;
}
}
return inativo;
}
public String verificarStatus(){
FacesContext context = FacesContext.getCurrentInstance();
String status = null;
if (this.usuarioSelecionado.getStatus().equals("Ativo"))
{
status = "/usuarios/CadastroUsuario";
}
else
{
context.addMessage(null, new FacesMessage("Este usuário está com o cadastro Inativo. Ele não pode ser editado"));
}
return status;
}
public void excluir() {
FacesContext context = FacesContext.getCurrentInstance();
if (this.usuarioSelecionado.getStatus().equals("Ativo"))
{
this.usuarioSelecionado.setStatus("Inativo");
}
else
{
this.usuarioSelecionado.setStatus("Ativo");
}
try {
this.cadastroUsuarioService.salvar(this.usuarioSelecionado);
context.addMessage(null, new FacesMessage("O status do cadastro do usuário " + usuarioSelecionado.getNome() + " com o CPF : " + usuarioSelecionado.getCpf() + " foi alterado com sucesso."));
} catch (NegocioException e) {
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
}
}
public void pesquisar() {
usuariosFiltrados = usuarios.filtrados(filtro);
}
public List<Usuario> getUsuariosFiltrados() {
return usuariosFiltrados;
}
public UsuariosRep getUsuarios() {
return usuarios;
}
public UsuarioFilter getFiltro() {
return filtro;
}
public Usuario getUsuarioSelecionado() {
return usuarioSelecionado;
}
public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
this.usuarioSelecionado = usuarioSelecionado;
}
}
UsuariosRep.java
package com.sisRastrbov.repository;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.sisRastrbov.model.Usuario;
import com.sisRastrbov.repository.filter.UsuarioFilter;
public class UsuariosRep implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public Usuario guardar(Usuario usuario) {
EntityTransaction trx = manager.getTransaction();
trx.begin();
usuario = manager.merge(usuario);
trx.commit();
return usuario;
}
public Usuario porNome(String nome)
{
return manager.find(Usuario.class, nome);
}
public Usuario porId(Long id)
{
return manager.find(Usuario.class, id);
}
public List<Usuario> listaDeUsu()
{
return manager.createQuery("from Usuario", Usuario.class).getResultList();
}
public List<Usuario> raizes()
{
return manager.createQuery("from Usuario",Usuario.class).getResultList();
}
@SuppressWarnings("unchecked")
public List<Usuario> filtrados(UsuarioFilter filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Usuario.class);
if (filtro.getNome() != null) {
criteria.add(Restrictions.eq("nome", filtro.getNome()));
}
// orderBy do SQL
return criteria.addOrder(Order.asc("id")).list();
}
public void remover(Usuario usuario) {
this.manager.remove(usuario);
EntityTransaction trx = manager.getTransaction();
trx.begin();
manager.flush();
trx.commit();
}
}
UsuarioFIlter.java
package com.sisRastrbov.repository.filter;
import java.io.Serializable;
public class UsuarioFilter implements Serializable {
private static final long serialVersionUID = 1L;
private String nome;
public String getNome() {
return nome;
}
//TODO implementar validação
public void setNome(String nome) {
this.nome = nome;
}
}
Desde já, agradeço qualquer opinião ou sugestão.