Dialog não deve aparecer em edição

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.

Acredito que é porque mesmo ocultando no MB ele vai executar o oncomplete mesmo assim no final.

No teu editar quando não vazio poderia colocar

RequestContext.getCurrentInstance().addCallbackParam("sucesso", true);

e no botão

if(args.sucesso) { dlgRecurso.show(); }

edudebom, obrigadão mesmo! Essa foi em cheio! :smiley:

Só precisei alterar um pouquinho a lógica/código que me passou. Assim resolveu:

no botão

<p:commandButton value="Editar" icon="ui-icon-edit" oncomplete="if (args.sucesso) { dlgRecurso.show(); }" action="#{recursoMB.editAction()}" update=":dlgCadastroRecurso, :form_msg:messages" />

e no método de edição:

	public void editAction() {
		RequestContext.getCurrentInstance().addCallbackParam("sucesso", true);

		if (selectRecurso.length != 1) {
			RequestContext.getCurrentInstance().addCallbackParam("sucesso", false);
			Messages.addGlobalWarn("Selecione um recurso.");
		} else {

			identificaAcao("editar");
			recursoController.startEdit(selectRecurso[0]);
		}
	}

Mais uma vez, obrigado pela ajuda.

Abs.