Boa tarde, pessoal.
Há algum tempo estou tentando fazer com que uma Dialog não seja exibida quando seleciono nenhum item ou mais de um item no datatable. Já tentei várias dicas encontradas no google e aqui no fórum.
Segue o código do botão EDITAR:
<h:form id="frmRecursos">
<h3>Recursos</h3>
<p:toolbar>
<p:toolbarGroup align="left">
<p:commandButton value="Adicionar" icon="ui-icon-document" oncomplete="dlgRecurso.show()"
action="#{recursoMB.newAction()}" update=":dlgCadastroRecurso, :form_msg:messages" />
<p:commandButton value="Editar" icon="ui-icon-edit" oncomplete="dlgRecurso.show();"
action="#{recursoMB.editAction()}" update=":dlgCadastroRecurso, :form_msg:messages" />
<p:commandButton value="Excluir" icon="ui-icon-trash" action="#{recursoMB.removeAction()}"
update="listaRecursos, :form_msg:messages"/>
</p:toolbarGroup>
</p:toolbar>
<p:dataTable id="listaRecursos" emptyMessage="Nenhum registro." var="item" value="#{recursoMB.recursoModel}"
selection="#{recursoMB.selectRecurso}" update="dlgRecurso" rowKey="#{item.id}">
<p:column selectionMode="multiple" />
<p:column headerText="Nome">
<h:outputText value="#{item.nome}"/>
</p:column>
<p:column headerText="Descrição">
<h:outputText value="#{item.descricao}" />
</p:column>
</p:dataTable>
</h:form>
Aqui estão os métodos no MBean que tratam as ações de novo, editar e excluir:
private String acao;
public void init() {
conversation.begin();
recursos = recursoRepository.listRecursos();
recursoModel = new RecursoModel();
this.acao = "";
}
public void saveAction() {
recursoController.saveToDatabase();
Messages.addGlobalInfo("O recurso foi salvo.");
if (!this.acao.equals("editar"))
recursos.add(recursoController.getRecurso());
}
public void removeAction() {
if (selectRecurso.length == 0) {
Messages.addGlobalWarn("Selecione um recurso.");
} else {
int cont = 0;
for (Recurso r : selectRecurso) {
recursoController.startEdit(r);
recursoController.delete();
recursos.remove(r);
cont++;
}
if (cont > 1) {
Messages.addGlobalInfo("Os recursos foram excluídos.");
} else {
Messages.addGlobalInfo("O recurso foi excluído.");
}
}
}
public void editAction() {
if (selectRecurso.length != 1) {
Messages.addGlobalWarn("Selecione um recurso.");
RequestContext.getCurrentInstance().execute("dlgRecurso.hide()");
} else {
identificaAcao("editar");
recursoController.startEdit(selectRecurso[0]);
}
}
Com esse código, ao selecionar vários registros ou nenhum registro da datatable e clicar no botão editar, deveria apenas aparecer a mensagem avisando o usuário que deve ser selecionado pelo menos ou apenas um registro e o dialog com o form de edição não deve aparecer.
Se puderem me dar alguma dica, desde já agradeço.