Montar um formulário dinamico usando JSF 2.0

1 resposta
L

Olá pessoal,

Estou fazendo um trabalho da faculdade, e tem de ser em JSF 2.0 e sou mó noob nesta tecnologia, então preciso de um help, meu problema é o seguinte, tenho um formulário que vai ter x campos e um dropdown, caso o usuário selecione uma opção deste dropdown, irá aparecer mais campos, fazer isso eu já consegui fazer (vou postar o que eu já fiz abaixo) o problema é que os campos que devem aparecer, também precisam ser validados como required e tal, mas quando do o submit, só os campos que já estavam visiveis são validados e de quebra os que foram exibidos depois do usuario selecionar a opção são escondidos novamente…

No caso a selectOneMenu irá ter dois valores {Assinante:A,Promotor:P} quando usuário selecionar valor Promotor:P então os campos que estão dentro de idPanelDadosPromotor devem ser exibidos e validados, até agora só está exibindo não está validando, é como se os campos não fizessem parte do form, como eu adiciono eles?

Obrigado

o JSF

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form id="formAssinante">
            <h:outputLabel value="Nome" for="nomeAssinante" />
            <h:inputText id="nomeAssinante" value="#{assinanteManagedBean.assinante.nomeAssinante}" title="Nome" required="true" requiredMessage="Required"/>
            <br/><h:outputLabel value="Apelido" for="apelidoAssinante" />
            <h:inputText id="apelidoAssinante" value="#{assinanteManagedBean.assinante.apelidoAssinante}" title="Apelido" required="true" requiredMessage="Required"/>
            <br/><h:outputLabel value="Email" for="emailAssinante" />
            <h:inputText id="emailAssinante" value="#{assinanteManagedBean.assinante.emailAssinante}" title="Email" required="true" requiredMessage="Required"/>
            <br/><h:outputLabel value="Senha" for="senhaAssinante" />
            <h:inputText id="senhaAssinante" value="#{assinanteManagedBean.assinante.senhaAssinante}" title="Senha" required="true" requiredMessage="Required"/>
            <br/><h:outputLabel value="FotoAssinante" for="fotoAssinante" />
            <h:inputText id="fotoAssinante" value="#{assinanteManagedBean.assinante.fotoAssinante}" title="Foto" />
            <br/><h:outputLabel value="Sexo" for="sexoAssinante" />
            <h:inputText id="sexoAssinante" value="#{assinanteManagedBean.assinante.sexoAssinante}" title="Senha" required="true" requiredMessage="Required"/>
            <br/><h:outputLabel value="Data de Nascimento" for="dataNascimentoAssinante" />
            <h:inputText id="dataNascimentoAssinante" value="#{assinanteManagedBean.assinante.dataNascimentoAssinante}" title="Data Nascimento" required="true" requiredMessage="Required">
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:inputText>
            <br/><h:outputLabel value="Funçao" for="funcaoAssinante" />
            <h:selectOneMenu id="funcaoAssinante" value="#{assinanteManagedBean.assinante.funcaoAssinante}">
                <f:selectItems value="#{assinanteManagedBean.funcaoAssinanteList}"/>
                <f:ajax event="change" listener="#{assinanteManagedBean.processarPainelDadosPromotor}" execute="@this" render="wrapDadosPromotor" />
            </h:selectOneMenu>
            <br/><br/><br/>
            <h:panelGroup id="wrapDadosPromotor">
                <h:panelGroup id="idPanelDadosPromotor" rendered="#{assinanteManagedBean.exibePainelPromotor}">
                    <h:outputLabel value="tipoPessoaPromotor" for="tipoPessoaPromotor" />
                    <h:inputText id="tipoPessoaPromotor" value="#{assinanteManagedBean.promotor.tipoPessoaPromotor}" title="tipoPessoaPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="cpfCnpjPromotor" for="cpfCnpjPromotor" />
                    <h:inputText id="cpfCnpjPromotor" value="#{assinanteManagedBean.promotor.cpfCnpjPromotor}" title="cpfCnpjPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="telefonePromotor" for="telefonePromotor" />
                    <h:inputText id="telefonePromotor" value="#{assinanteManagedBean.promotor.telefonePromotor}" title="telefonePromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="celularPromotor" for="celularPromotor" />
                    <h:inputText id="celularPromotor" value="#{assinanteManagedBean.promotor.celularPromotor}" title="celularPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="cepEnderecoPromotor" for="cepEnderecoPromotor" />
                    <h:inputText id="cepEnderecoPromotor" value="#{assinanteManagedBean.promotor.cepEnderecoPromotor}" title="Foto" />
                    <br/><h:outputLabel value="logradouroEnderecoPromotor" for="logradouroEnderecoPromotor" />
                    <h:inputText id="logradouroEnderecoPromotor" value="#{assinanteManagedBean.promotor.logradouroEnderecoPromotor}" title="logradouroEnderecoPromotor" required="true" requiredMessage="Required"/>

                    <br/><h:outputLabel value="numeroEnderecoPromotor" for="numeroEnderecoPromotor" />
                    <h:inputText id="numeroEnderecoPromotor" value="#{assinanteManagedBean.promotor.numeroEnderecoPromotor}" title="numeroEnderecoPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="bairroEnderecoPromotor" for="bairroEnderecoPromotor" />
                    <h:inputText id="bairroEnderecoPromotor" value="#{assinanteManagedBean.promotor.bairroEnderecoPromotor}" title="bairroEnderecoPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="cidadeEnderecoPromotor" for="cidadeEnderecoPromotor" />
                    <h:inputText id="cidadeEnderecoPromotor" value="#{assinanteManagedBean.promotor.cidadeEnderecoPromotor}" title="estadoEnderecoPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="estadoEnderecoPromotor" for="estadoEnderecoPromotor" />
                    <h:inputText id="estadoEnderecoPromotor" value="#{assinanteManagedBean.promotor.estadoEnderecoPromotor}" title="estadoEnderecoPromotor" required="true" requiredMessage="Required"/>
                    <br/><h:outputLabel value="paisEnderecoPromotor" for="paisEnderecoPromotor" />
                    <h:inputText id="paisEnderecoPromotor" value="#{assinanteManagedBean.promotor.paisEnderecoPromotor}" title="paisEnderecoPromotor" required="true" requiredMessage="Required"/>
                </h:panelGroup>
            </h:panelGroup>
            <br/><br/><br/>
            <h:commandButton id="inserir" action="#{assinanteManagedBean.inserirCompleto}" value="Inserir" />

        </h:form>
    </h:body>
</html>

o ManagedBean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.evto.apresentacao;

import br.com.evto.fachada.AssinanteFachada;
import br.com.evto.fachada.PromotorFachada;
import br.com.evto.modelo.Assinante;
import br.com.evto.modelo.Promotor;
import br.com.evto.util.DateUtil;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author root
 */
@ManagedBean(name = "assinanteManagedBean")
@RequestScoped
public class AssinanteManagedBean {

    private Assinante assinante;
    private Promotor promotor;
    private boolean exibePainelPromotor;
    private String funcaoAssinante;

    public List<SelectItem> getFuncaoAssinanteList() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        list.add(new SelectItem("A", "Assinante"));
        list.add(new SelectItem("P", "Promotor"));
        return list;
    }

    public String getFuncaoAssinante() {
        return funcaoAssinante;
    }

    public void setFuncaoAssinante(String funcaoAssinante) {
        this.funcaoAssinante = funcaoAssinante;
    }

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

    public Assinante getAssinante() {
        if (assinante == null) {
            assinante = new Assinante();
        }
        return assinante;
    }

    public void setAssinante(Assinante assinante) {
        this.assinante = assinante;
    }

    public Promotor getPromotor() {
        if (promotor == null) {
            promotor = new Promotor();
        }
        return promotor;
    }

    public void setPromotor(Promotor promotor) {
        this.promotor = promotor;
    }

    public boolean isExibePainelPromotor() {
        return exibePainelPromotor;
    }

    public void setExibePainelPromotor(boolean exibePainelPromotor) {
        this.exibePainelPromotor = exibePainelPromotor;
    }

    public String montarPaginaParaInsercao() throws Exception {
        this.assinante = new Assinante();
        return "/assinante/InserirAssinante";
    }

    public String inserir() throws Exception {
        Assinante ass = this.getAssinante();
        //ass.setIdAssinante(Long.valueOf("1"));
        ass.setDataCadastroAssinante(DateUtil.now());
        ass.setFuncaoAssinante("A");
        this.setAssinante(ass);
        AssinanteFachada.inserir(this.getAssinante());
        return "/index";
    }

    public String inserirCompleto() throws Exception {
        Assinante ass = this.getAssinante();
        ass.setDataCadastroAssinante(DateUtil.now());
        this.setAssinante(ass);
        AssinanteFachada.inserir(this.getAssinante());

        if (ass.getFuncaoAssinante().equals("P")) {
            this.getPromotor().setIdAssinante(this.getAssinante());
            PromotorFachada.inserir(this.getPromotor());
        }

        return "/index";
    }

    public String montarPaginaCompletaParaInsercao() throws Exception {
        this.assinante = new Assinante();
        this.assinante.setPromotor(new Promotor());

        return "/assinante/inserirAssinantePromotor";
    }

    public void processarPainelDadosPromotor(AjaxBehaviorEvent event) throws Exception {
        if (this.getAssinante().getFuncaoAssinante().equals("P")) {
            this.setExibePainelPromotor(true);
        } else {
            this.setExibePainelPromotor(false);
        }
    }
}

1 Resposta

H

Bom dia.

Bom… o que eu vejo que você pode fazer… é criar um validador para esses campos que aparecerão depois.
Aí você valida para ver se eles podem ser validados ou não.

Valeu!

Criado 16 de maio de 2010
Ultima resposta 17 de mai. de 2010
Respostas 1
Participantes 2