P:dialog - Primefaces

7 respostas
F

Boa tarde pessoal,

Estou tentando fazer o seguinte…

Eu possuo uma tela de cadastro de pedido…

Nesse cadastro eu seleciono através de um combo o número da proposta…

Caso eu não tenha a proposta cadastrada vai ter um botão que ao clicar ele abre um p:dialog… para informar apenas o nº da proposta e dentro do próprio p:dialog terá um botão salvar…

Só que ele verifica a validação dos campos da tela principal… e diz que existem campos obrigatórios…

Mas eu queria que esse botão do p:dialog validasse apenas o text dentro do p:dialog…

Alguém sabe me informar como eu faço isso??

Obrigado!

7 Respostas

F

Dei uma fuçada aqui...

Coloquei um form dentro do p:dialog e coloquei um update e o nome do form..agora ela não valida nada e nem chama meu metodo na classe bean.. =´[[

Segue código..

<p:dialog header="Cadastro rápido da proposta"
				widgetVar="dlg" resizable="false" modal="true">
				<p:panel id="dialog">
				<h:form>
					<h:panelGrid columns="2">
						<h:panelGroup>
							<h:outputLabel value="Fornecedor: " for="fornecedorDialog" />
						</h:panelGroup>
						<h:panelGroup>
							<h:outputLabel value="Nº do Contrato " for="contratoDialog" />
						</h:panelGroup>
						<h:panelGroup>
							<p:selectOneMenu id="fornecedorDialog" required="true"
								requiredMessage="Fornecedor obrigatório"
								value="#{pedidoBean.empresa.empresa}" styleClass="combo">
								<f:selectItem itemValue="" itemLabel="Selecione..." />
								<f:selectItems value="#{pedidoBean.fornecedores}" />
								<f:ajax execute="fornecedorDialog" render="contratoDialog"
									event="change" listener="#{pedidoBean.buscarContrato}"></f:ajax>
							</p:selectOneMenu>
						</h:panelGroup>
						<h:panelGroup>
							<p:inputText id="contratoDialog" readonly="true" required="true"
								requiredMessage="Nº do contrato obrigatório" size="20"
								maxlength="20" value="#{pedidoBean.contrato.numero}" />
						</h:panelGroup>
					</h:panelGrid>
					<h:panelGrid columns="1" style="margin-bottom:10px">
						<h:outputLabel for="proposta" value=" Nº da Proposta:" />
						<p:inputText id="proposta" required="true"
							requiredMessage="Nº da proposta obrigatório" size="30"
							maxlength="30" />
					</h:panelGrid>

					<p:commandButton value="Salvar"
						action="#{pedidoBean.salvarProposta}" update="dialog"/>

				</h:form>
				</p:panel>
			</p:dialog>

quem puder me ajudar eu agradeco...

vlwww

B

e ae Furlani…
posta seu codigo completo,
a tela principal junto com o dialog…
pode estar ocorrendo um conflito dos forms

F

Segue página completa

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="/templates/interna.xhtml">
	<ui:define name="titulo">
		    Pedidos de Serviço
		</ui:define>
	<ui:define name="corpo">
		<p:ajaxStatus onstart="statusDialog.show();"
			onsuccess="statusDialog.hide();" />

		<p:dialog modal="true" widgetVar="statusDialog" header="Status"
			draggable="false" closable="false">
			<h:graphicImage style="align: center" library="imagens"
				name="loading.gif" />
		</p:dialog>
		<h:form id="formPedido">
			<p:growl id="growl" showDetail="true" />
			<p:panel id="empresa" header="Informações do Fornecedor">
				<p:messages id="msg" />
				<h:inputHidden value="#{pedidoBean.pedidoServico.codigo}" />
				<h:inputHidden value="#{pedidoBean.contrato.codigo}" />
				<h:panelGrid columns="2">
					<h:panelGroup>
						<h:outputLabel value="Fornecedor: " for="fornecedor" />
					</h:panelGroup>
					<h:panelGroup>
						<h:outputLabel value="Nº do Contrato " for="contrato" />
					</h:panelGroup>
					<h:panelGroup>
						<p:selectOneMenu id="fornecedor" required="true"
							requiredMessage="Fornecedor obrigatório"
							value="#{pedidoBean.empresa.empresa}" styleClass="combo">
							<f:selectItem itemValue="" itemLabel="Selecione..." />
							<f:selectItems value="#{pedidoBean.fornecedores}" />
							<f:ajax execute="fornecedor" render="empresa" event="change"
								listener="#{pedidoBean.buscarContrato}"></f:ajax>
						</p:selectOneMenu>
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="contrato" readonly="true" required="true"
							requiredMessage="Nº do contrato obrigatório" size="20"
							maxlength="20" value="#{pedidoBean.contrato.numero}" />
					</h:panelGroup>
				</h:panelGrid>
				<h:panelGrid columns="2">
					<h:panelGroup>
						<h:outputLabel value="Nº da proposta " for="proposta" />
					</h:panelGroup>
					<h:panelGroup>
						<h:outputLabel />
					</h:panelGroup>
					<h:panelGroup>
						<p:selectOneMenu id="proposta" required="true"
							requiredMessage="Nº da Proposta obrigatório"
							value="#{pedidoBean.proposta.codigo}">
							<f:selectItem itemValue="" itemLabel="Selecione..." />
							<f:selectItems value="#{pedidoBean.propostas}" />
						</p:selectOneMenu>
					</h:panelGroup>
					<p:commandButton type="button" value="Adicionar"
						onclick="dlg.show()" />
				</h:panelGrid>
			</p:panel>
			<br />
			<p:panel id="pedido" header="Dados do pedido de serviço">
				<h:panelGrid columns="1">
					<h:panelGroup>
						<h:outputLabel value="Tipo de Serviço: " for="tipo" />
					</h:panelGroup>
					<h:panelGroup>
						<p:selectOneRadio id="tipo"
							value="#{pedidoBean.pedidoServico.tipo}">
							<f:selectItem itemValue="legado" itemLabel="Legado" />
							<f:selectItem itemValue="outros" itemLabel="Outros" />
						</p:selectOneRadio>
					</h:panelGroup>
				</h:panelGrid>
				<h:panelGrid columns="1">
					<h:panelGroup>
						<h:outputLabel value="Nº Anexo: " for="anexo" />
					</h:panelGroup>
					<h:panelGroup>
						<p:inputText id="anexo" required="true"
							requiredMessage="Nº anexo obrigatório" size="20" maxlength="30"
							value="#{pedidoBean.pedidoServico.numeroAnexo}">
						</p:inputText>
					</h:panelGroup>
				</h:panelGrid>
			</p:panel>
			<br />

			<h:panelGrid columns="2">
				<h:panelGroup>
					<p:commandButton value="Salvar" action="#{pedidoBean.salvar}"
						update="empresa, pedido, growl, panelParcela">
					</p:commandButton>
				</h:panelGroup>
				<h:panelGroup>
					<p:ajaxStatus>
						<f:facet name="start">
							<h:graphicImage library="imagens" name="loading.gif" />
						</f:facet>
						<f:facet name="complete">
							<h:outputText value="" />
						</f:facet>
					</p:ajaxStatus>
				</h:panelGroup>
			</h:panelGrid>

		</h:form>
		<p:dialog header="Cadastro rápido da proposta" widgetVar="dlg"
			resizable="false" modal="true">
			<p:panel>
				<h:form id="dialog">
					<h:panelGrid columns="2">
						<h:panelGroup>
							<h:outputLabel value="Fornecedor: " for="fornecedorDialog" />
						</h:panelGroup>
						<h:panelGroup>
							<h:outputLabel value="Nº do Contrato " for="contratoDialog" />
						</h:panelGroup>
						<h:panelGroup>
							<p:selectOneMenu id="fornecedorDialog" required="true"
								requiredMessage="Fornecedor obrigatório"
								value="#{pedidoBean.empresa.empresa}" styleClass="combo">
								<f:selectItem itemValue="" itemLabel="Selecione..." />
								<f:selectItems value="#{pedidoBean.fornecedores}" />
								<f:ajax execute="fornecedorDialog" render="contratoDialog"
									event="change" listener="#{pedidoBean.buscarContrato}"></f:ajax>
							</p:selectOneMenu>
						</h:panelGroup>
						<h:panelGroup>
							<p:inputText id="contratoDialog" readonly="true" required="true"
								requiredMessage="Nº do contrato obrigatório" size="20"
								maxlength="20" value="#{pedidoBean.contrato.numero}" />
						</h:panelGroup>
					</h:panelGrid>
					<h:panelGrid columns="1" style="margin-bottom:10px">
						<h:outputLabel for="proposta" value=" Nº da Proposta:" />
						<p:inputText id="proposta" required="true"
							requiredMessage="Nº da proposta obrigatório" size="30"
							maxlength="30" />
					</h:panelGrid>

					<p:commandButton value="Salvar"
						action="#{pedidoBean.salvarProposta}" update="dialog"
						oncomplete="dlg.hide()" />

				</h:form>

			</p:panel>
		</p:dialog>
	</ui:define>
</ui:composition>
</html>
D

Cara, veja como eu faço, pode ser o seu ajax

<p:commandButton 
                   value="Cadastrar"   update="tabela_F" 
                   action="#{funcaoBean.adiciona}" ajax="false" 
                   oncomplete="janela.hide()"
  		   image="ui-icon-check"/>

Pode ser o “immediate” também …

F

Opa consegui!!

Faltou eu colocar o ajax=false… vlw Diego!!

e vlw build_successful

=D

D

Opa, precisando estamos por ae …
Abraços

S

resolvi o meu assim, depois de querbar cabeça…

index.xhtml

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"&gt;
    &lt;h:head&gt;
        &lt;title&gt;Facelet Title&lt;/title&gt;
        &lt;script type="text/javascript"&gt;  
            function handlePessoaRequest(xhr, status, args) {  
                if(args.validationFailed || args.ok == false) {  
                    jQuery('#dlgPessoa').effect("shake", { times:3 }, 100);  
                } else {  
                    varPessoa.hide();
                   // window.alert("OK, ocultando..")
                    //jQuery('#loginLink').fadeOut();  
                }  
            }  
        &lt;/script&gt;  
    &lt;/h:head&gt;
    &lt;h:body&gt;

        &lt;h:form id="formDlgPessoa" prependId="false"&gt;
            &lt;p:growl showDetail="true" showSummary="true" id="grow" sticky="true" life="1"/&gt;
            &lt;p:dialog closable="true" id="dlgPessoa" header="Cadastro" widgetVar="varPessoa" modal="true" width="600"&gt;
                &lt;h:panelGrid columns="2"&gt;
                    &lt;h:outputLabel value="Nome" for="txtNome"/&gt;
                    &lt;p:inputText id="txtNome" value="#{pessoaBean.nome}" required="true" requiredMessage="Obrigatorio o campo"/&gt;
                    &lt;p:message id="msgTxt" for="txtNome"/&gt;
                &lt;/h:panelGrid&gt;
                &lt;p:commandButton value="Salvar"
                                 actionListener="#{pessoaBean.salvar}"
                                 oncomplete="handlePessoaRequest(xhr,status,args)" 
                                 update=":formDlgPessoa:msgTxt,grow" ajax="true"
                                 immediate="false"/&gt;
            &lt;/p:dialog&gt;
        &lt;/h:form&gt;
        &lt;p:separator/&gt;
        &lt;h:form id="formPessoa"&gt;
            &lt;p:commandButton value="Ver" oncomplete="varPessoa.show()"/&gt;
        &lt;/h:form&gt;
    &lt;/h:body&gt;
&lt;/html&gt;

Bean.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author sfidencio
 */
@ManagedBean
@SessionScoped
public class PessoaBean {

    private String nome;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void salvar(ActionEvent event) {
        try {
            boolean ok = false;
            RequestContext cx = RequestContext.getCurrentInstance();
            System.out.println("Processamento..");

           /* if (this.nome.toString().equals("") || this.nome.toString().equals(null)) {
                ok = false;
            } else {
                FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "OK", "Salvo com sucesso!");
                FacesContext contexto = FacesContext.getCurrentInstance();
                contexto.addMessage("formDlgPessoa", msg);
                System.out.println("OK Salvo..");
            }*/
            cx.addCallbackParam("ok", true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Creates a new instance of PessoaBean
     */
    public PessoaBean() {
    }
}



A validação do faces(Process Validations) na caixa de dialog(p:dialog) funcionou perfeito, de modo que o metodo de CallBack. envia para o cliente a resposta do servidor, dessa forma,. o no evento. jquery oncomplete,. ele chama o metodo js,.que captura o retorno do CallBack. Não é complicado fazer isso em varios forms,. depois que pega a manha vai embora.
Criado 9 de janeiro de 2012
Ultima resposta 11 de mai. de 2012
Respostas 7
Participantes 4