Pessoal tenho um dialog que fecha mesmo sem eu chamar o método hide() do mesmo, quando clico em ok ele esta fechando automaticamente porem quero que ele somente feche se setar uma variavel no servidor para ele fechar, abaixo segue o código:
<h:form id="formCadEquipamento">
<p:dialog header="Cadastrar Equipamento" widgetVar="dlgCadEquipamento" resizable="false" id="dialogCadEquipamento" modal="true">
<p:messages id="msgTelaCadEquipamento"/>
<h:panelGrid id="pngCadastrar" columns="4" cellpadding="4" >
<h:outputLabel value="Tag:" style="float: right;"/>
<p:inputText id="idTag" value="#{gerenciamentoCadastroEquipamentosMB.equipamento.tag}" required="true" requiredMessage="O campo é requerido" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Potência:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.potenciaMax}" disabled="false" style="width: 220px;font-weight:bold; ">
</p:inputText>
<h:outputLabel value="Classificação:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.classificacao}" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Alcance:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.alcance}" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Antena:" style="float: right;"/>
<p:selectOneMenu id="antena" value="#{gerenciamentoCadastroEquipamentosMB.idAntena}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Antena--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.antenas}" />
</p:selectOneMenu>
<h:outputLabel value="Tipo:" style="float: right;"/>
<p:selectOneMenu id="tipo" value="#{gerenciamentoCadastroEquipamentosMB.idTipo}" style="width: 230px;font-weight: bold;">
<f:selectItem itemValue="" itemLabel="--Selecionar Tipo--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.tipos}" />
</p:selectOneMenu>
<h:outputLabel value="modelo:" style="float: right;"/>
<p:selectOneMenu id="modelo" value="#{gerenciamentoCadastroEquipamentosMB.idModelo}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Modelo--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.modelos}" />
</p:selectOneMenu>
<h:outputLabel value="Função:" style="float: right;"/>
<p:selectOneMenu id="funcao" value="#{gerenciamentoCadastroEquipamentosMB.idFuncao}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Função--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.funcoes}" />
</p:selectOneMenu>
<h:outputLabel value="Localização:" style="float: right;"/>
<p:selectOneMenu id="localizacao" value="#{gerenciamentoCadastroEquipamentosMB.idLocalizacao}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Localização--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.localizacoes}" />
</p:selectOneMenu>
<h:outputLabel value="Responsável:" style="float: right;"/>
<p:selectOneMenu id="responsavel" value="#{gerenciamentoCadastroEquipamentosMB.idResponsavel}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Responsável--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.responsaveis}" />
</p:selectOneMenu>
</h:panelGrid>
<p:separator/>
<p:commandButton value="OK" actionListener="#{gerenciamentoCadastroEquipamentosMB.salvar}" update=":formEquipamento:tableEquipamentos :formEquipamento:btnEditar :formEquipamento:btnExcluir :formEquipamento:btnVisualizar :formCadEquipamento:dialogCadEquipamento" />
<p:commandButton value="Cancelar" onclick="dlgCadEquipamento.hide();"/>
</p:dialog>
<script type="text/javascript">
function verificaSucesso() {
var variavel = '#{gerenciamentoCadastroEquipamentosMB.isFechaTela}'; //Aqui pega a variável do Bean
alert('Retornou: ' + variavel);
if (variavel == true) {
alert('Entrou para fechar a tela');
dlgCadEquipamento.hide(); //E aqui verifica se retornou true e pode fechar
}
alert('Deixa a tela aberta');
}
</script>
</h:form>
Se alguem souber como resolver isso agradeço.
Olá srmachado ,
Chame a dialog através da tag p:commadLink e não da p:commadButton como fez. Acho que isso ajudará!
Aqui mostra como faze: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate .
Ou então no site do primefaces na parte que mostra dialog com login.
Como você quer controlar o fechamento de acordo com o que acontece no servidor, vai precisar do RequestContext e talvez do RemoteCommand
Em que parte do seu tutorial você mostra com fazer o que estou precisando?
srmachado:
[quote]Hebert Coelho
Em que parte do seu tutorial você mostra com fazer o que estou precisando?[/quote]Página 6 e página do xhtml.
Cara não sei se fiz errado mais não funcionou ele continua fechando:
<h:form id="formCadEquipamento">
<p:dialog header="Cadastrar Equipamento" widgetVar="dlgCadEquipamento" resizable="false" id="dialogCadEquipamento" modal="true">
<p:messages id="msgTelaCadEquipamento"/>
<h:panelGrid id="pngCadastrar" columns="4" cellpadding="4" >
<h:outputLabel value="Tag:" style="float: right;"/>
<p:inputText id="idTag" value="#{gerenciamentoCadastroEquipamentosMB.equipamento.tag}" required="true" onkeypress="javascript:test()" requiredMessage="O campo é requerido" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Potência:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.potenciaMax}" disabled="false" style="width: 220px;font-weight:bold; ">
</p:inputText>
<h:outputLabel value="Classificação:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.classificacao}" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Alcance:" style="float: right;"/>
<p:inputText value="#{gerenciamentoCadastroEquipamentosMB.equipamento.alcance}" disabled="false" style="width: 220px;font-weight:bold; "/>
<h:outputLabel value="Antena:" style="float: right;"/>
<p:selectOneMenu id="antena" value="#{gerenciamentoCadastroEquipamentosMB.idAntena}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Antena--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.antenas}" />
</p:selectOneMenu>
<h:outputLabel value="Tipo:" style="float: right;"/>
<p:selectOneMenu id="tipo" value="#{gerenciamentoCadastroEquipamentosMB.idTipo}" style="width: 230px;font-weight: bold;">
<f:selectItem itemValue="" itemLabel="--Selecionar Tipo--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.tipos}" />
</p:selectOneMenu>
<h:outputLabel value="modelo:" style="float: right;"/>
<p:selectOneMenu id="modelo" value="#{gerenciamentoCadastroEquipamentosMB.idModelo}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Modelo--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.modelos}" />
</p:selectOneMenu>
<h:outputLabel value="Função:" style="float: right;"/>
<p:selectOneMenu id="funcao" value="#{gerenciamentoCadastroEquipamentosMB.idFuncao}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Função--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.funcoes}" />
</p:selectOneMenu>
<h:outputLabel value="Localização:" style="float: right;"/>
<p:selectOneMenu id="localizacao" value="#{gerenciamentoCadastroEquipamentosMB.idLocalizacao}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Localização--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.localizacoes}" />
</p:selectOneMenu>
<h:outputLabel value="Responsável:" style="float: right;"/>
<p:selectOneMenu id="responsavel" value="#{gerenciamentoCadastroEquipamentosMB.idResponsavel}" style="width: 230px;">
<f:selectItem itemValue="" itemLabel="--Selecionar Responsável--"/>
<f:selectItems value="#{gerenciamentoCadastroEquipamentosMB.responsaveis}" />
</p:selectOneMenu>
</h:panelGrid>
<p:separator/>
<f:facet name="footer">
<p:commandButton value="OK" actionListener="#{gerenciamentoCadastroEquipamentosMB.salvar}" update=":formEquipamento:tableEquipamentos :formEquipamento:btnEditar :formEquipamento:btnExcluir :formEquipamento:btnVisualizar :formCadEquipamento:dialogCadEquipamento" oncomplete="handleLoginRequest(xhr, status, args)" />
<p:commandButton value="Cancelar" onclick="dlgCadEquipamento.hide();"/>
</f:facet>
</p:dialog>
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
alert(args);
if (args.validationFailed || args.FECHAR) {
alert('Entrou');
jQuery('#dialogCadEquipamento').effect("shake", { times:3 }, 100);
} else {
alert('Não Entrou');
dialogCadEquipamento.hide();
}
}
</script>
</h:form>
No server:
RequestContext contextRequest = RequestContext.getCurrentInstance();
contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
srmachado, bom dia!
Como está sua regra de navegação? O que seu método está retornando?
Não esta retornando nada, pois estou usando o actionListener, dai meu método é void, segue meu faces-config:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
<application>
<message-bundle>com.arcelormittal.scer.messagens.messagens</message-bundle>
</application>
<navigation-rule>
<from-view-id>/paginas/principal/principal.xhtml</from-view-id>
<navigation-case>
<from-outcome>cadastroFabricantes</from-outcome>
<to-view-id>/paginas/cadastros/cadastroFabricantes.jsf</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>cadastroEquipamento</from-outcome>
<to-view-id>/paginas/cadastros/cadastroEquipamentos.jsf</to-view-id>
</navigation-case>
</navigation-rule>
<lifecycle>
<phase-listener>com.scer.controller.PhaseListener</phase-listener>
</lifecycle>
A declaração do meu método esta assim:
public void salvar(ActionEvent actionEvent) {
}
Faz um teste tentando remover o update do seu commandButton.
srmachado:
[quote]Bom dia elio.cruz
Não esta retornando nada, pois estou usando o actionListener, dai meu método é void, segue meu faces-config:
A declaração do meu método esta assim:
public void salvar(ActionEvent actionEvent) {
}[/quote]
Passei por algo parecido utilizando o modal do richfaces. Seria muito custoso para você mudar seu método salvar para retornar um valor nulo?
Não esta retornando nada, pois estou usando o actionListener, dai meu método é void, segue meu faces-config:
A declaração do meu método esta assim:
public void salvar(ActionEvent actionEvent) {
}[/quote]
Passei por algo parecido utilizando o modal do richfaces. Seria muito custoso para você mudar seu método salvar para retornar um valor nulo?
[/quote]
E ao invés de utilizar o actionListener utilizar o action?
Fiz um teste usando o action achei que ia funcionar mais ainda não estar funcionando, fix meu método de salvamento retornar null e nada .
Retirando o update funcionou do jeito que queria, porem preciso atualizar alguns campos se houve sucesso no cadastro.
Deixando o update, ele sempre será executado, independente se você quer ou não e, quando ele é executado, o panel acaba sendo fechado.
Para resolver, a idéia é deixar sem o update no botão e criar um RemoteCommand, que faz o update necessário e você chama ele de dentro da sua função javascript, somente quando o resultado for o desejado.
Sou novo no mundo jsf e nunca usei esse comando por acaso você poderia me explicar melhor como ele funciona o RemoteCommand, o que ele faz e se tiver algum código mostrando o uso do mesmo ficaria grato.
A idéia dele é exportar uma função javascript e que através dela você consiga usar recursos de um commandButton, tais como action, process e update.
Então você cria um RemoteCommand que faz o update nos elementos que você quer e chama ele de dentro do seu JS.
No link que te passei tem um exemplo de código/uso.
Se você não conseguiu fazer igual no primeiro link que eu te passei, olha esse aqui então: http://www.primefaces.org/showcase/ui/dialogLogin.jsf
Simples do mesmo modo que o primeiro.