Olá, pessoal. Estou com dificuldades em um programa que estou montando atualmente: Neste programa, há uma tela de pesquisa de usuários cadastrados. Ao mesmo tempo que serão mostrados os dados dos usuários, cada registro possuirá dois botões, um para “bloquear” este cadastro e outro para abrir uma tela para editar os dados deste cadastro.
No momento eu tenho a seguinte ideia: quando o cadastro for bloqueado, o usuário não poderá mais editar os dados contidos neste registro, ou seja, caso o cadastro esteja bloqueado, o botão “editar” deve ser desabilitado. Mas com o método que estou utilizando, se existir um registro no meio de todos com o status “bloqueado”, todos os botões “editar” de todos os registros estão sendo desabilitados. Eu quero que seja desabilitado somente o botão “editar” do registro que esteja com o cadastro bloqueado.
Abaixo está o meu arquivo .xhtml e arquivo Bean.
MEU ARQUIVO .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: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">
// este é o botão que está em questão
<p:button outcome="/usuarios/CadastroUsuario" 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>
Neste código, o botão que desejo desabilitar é o botão que está com a anotação “este é o botão que está em questão”
ARQUIVO BEAN
@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;
}
}
Desde já agradeço qualquer opinião ou sugestão.