Hello everyone. I am putting together a program that works with user registration. In this project there is a screen to consult the registered users. The problem is this: in the register search screen, there is a field to fill in the name of the user to be searched and a SelectOneRadio to select the user status (active, inactive and all).
For example, if in the search field type "Bruno" and choose the "Active" option in SelectOneRadio and perform the search, the search will return all Brunos with the registry in the "Active" state. In each register there is an "Edit" button that opens a screen to change the register.
The issue is that I would like to use the "rendered" property on the xhtml p: button component so that when the search is performed with the SelectOneRadio "All" option selected, the "Edit" button is NOT RENDERED. I was able to disable and enable the "Edit" button according to the registration of the users returned by the search, but the problem this time is that now it does not depend on the user registration returned by the search, but on the ItemValue of the selected option in SelectOneRadio when I click the button "Search". I am sending the code of my files related to this search.
User Search.xhtml
<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:selectOneRadio id="StatusUsuario" value="#{pesquisaUsuarioBean.filtro.status}" >
<f:selectItem itemLabel="Ativo" itemValue="Ativo" />
<f:selectItem itemLabel="Inativo" itemValue="Inativo" />
<f:selectItem itemLabel="Todos" itemValue="Todos" />
</p:selectOneRadio>
</p:toolbarGroup>
<p:toolbarGroup align ="right">
<p:button value="Novo" outcome="/usuarios/CadastroUsuario"/>
</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">
<c:set var ="status" scope = "session"/>
<p:button outcome = "/usuarios/CadastroUsuario" icon="ui-icon-pencil" title="Editar" disabled="#{pesquisaUsuarioBean.inativo}">
<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>
UserFilter.java
public class UsuarioFilter implements Serializable {
private static final long serialVersionUID = 1L;
private String nome;
private String status = "Ativo";
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
Users.java
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() != "")
{
criteria.add(Restrictions.eq("nome", filtro.getNome()));
}
if (filtro.getStatus().equals("Ativo") || filtro.getStatus().equals("Inativo"))
{
criteria.add(Restrictions.eq("status", filtro.getStatus()));
}
// 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();
}
}
User SearchBean.java
@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 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."));
this.pesquisar();
} 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;
}
}
Thanks for any feedback or suggestion.