Jsf parâmetros

Bom dia a todos, então estou aprendendo a utilizar jsf e queria saber como faço para pegar o valor de um campo no meu formulário, tenho as seguintes coisas:

tenho uma JSP chamada inserir.jsp que chama uma classe com o nome PegaDados:

<h:commandButton value="Inserir" action="#{pegaDados.inserir}"/>

faces config:

    <managed-bean-name>pegaDados</managed-bean-name>
        <managed-bean-class>PegaDados</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

dentro desta classe PegaDados eu queria pegar um valor do campo Nome que está na jsp inserir.jsp

[]'s
Obrigado por hora…

Bom dia,

Primeiramente você precisa registrar o campo que você quer buscar do formulario no faces-config.

ficaria assim

<managed-bean> <managed-bean-name>pegaDados</managed-bean-name> <managed-bean-class>PegaDados</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>nome</property-name> <property-class>java.lang.String</property-class> </managed-property> </managed-bean>

Isso quer dizer que no seu PegaDados você terá uma propriedade “nome” do tipo String que será gerenciada pelo jsf.

Agora, no seu formulário deve ser um componente jsf de entrada de texto.
você pode usar assim

<h:inputText value="#{pegaDados.nome}" />

assim, o valor que você digitar no input text é automaticamente aplicado no Bean PegaDados quando o formulário for submetido.

Espero ter ajudado,

Ferryman

então acho que entendi sim, mas por exemplo esse nome eu teria que ter uma propriedade na classe PegaDados chamada de Nome certo ???

mais essa propriedade pertence a classe Agenda… eu quero após clicar no botão de inserir ele instanciar a classe PegaDados e por lá eu pegar este campo nome para então ele chamar meu DAO e persistir… entendeu ?? aff se não entendeu é pq até eu estou meio confuso… huahauah

Valeu!!!

ou o correto seria dentro da minha classe agenda eu pegar os dados do formulário e passar pra frente ???

[quote]então acho que entendi sim, mas por exemplo esse nome eu teria que ter uma propriedade na classe PegaDados chamada de Nome certo ???
[/quote]
É, isso mesmo.

Bom, o seu formulário pode ter ligação com varias propriedades de diversos beans, porem acredito que não é isso que você precisa. A instanciação dos backing beans quem faz é o jsf.

Se eu entendi bem seu problema, o que você pode fazer é ter um BackingBean com as propriedades que você precisa para o DAO, então você pode criar um método que instancia o objeto DAO e neste metodo ele pega as propriedades do bean que ja foram setadas, instancia o DAO e executa os comandos de persistencia.
no seu caso o método é o PegaDados.inserir.

Espero ter ajudado!

falou

então olha só como ficou…hehehe

Minha página que chama um bean para setar os valores dos campos nos atributos…

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
    <body>
        <f:view>
            <h:form>
                <center><h2> Inserção </h2></center>
                <br>
                <h3>Entre com os dados abaixo</h3>
                <table>
                    <tr>
                        <td>Nome:</td>
                        <td>
                            <h:inputText value="#{agenda.nome}"/>
                        </td>
                    </tr>
                    <tr>
                        <td>Endereço:</td>
                        <td>
                            <h:inputText value="#{agenda.endereco}"/>
                        </td>
                    </tr>
                    <tr>
                        <td>Cidade:</td>
                        <td>
                            <h:inputText value="#{agenda.cidade}"/>
                        </td>
                    </tr>
                    <tr>
                        <td>Telefone:</td>
                        <td>
                            <h:inputText value="#{agenda.telefone}"/>
                        </td>
                    </tr>
                </table>
                <p>
                    <h:commandButton value="Inserir" action="#{agenda.inserir}"/>
                </p>
            </h:form>
            <br>
            <h:outputLink value="index.jsf">
                <f:verbatim>voltar</f:verbatim>
            </h:outputLink>
        </f:view>
    </body>
</html>

Meu Bean com os atributos correspondentes a página…

import java.sql.*;
public class AgendaDB {
    private String nome = "";
    private String endereco = "";
    private String cidade = "";
    private String telefone = "";
    private String result_busca = "";
    private String result_inserir = "";
    
    
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCidade() {
        return cidade;
    }
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getTelefone() {
        return telefone;
    }
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
    
    public String inserir(){
        return new Facade().inserir(this);
    }
    
}

Minha classe que chama o DAO, coloquei com o nome de Facade mais foi apenas ilustração, pensei nessa classe como se fosse um BusinessDelegate…

public class Facade {
    
    /** Creates a new instance of Facade */
    public Facade() {
    }
    
    public String inserir(AgendaDB agendaDB) {
        return new CadastroDAO().inserir(agendaDB);
    }
    
}

E finalmente meu DAO que apenas recebe a AgendaDB e manda salvar…

será que está certo a estrutura…??

OBS: não sei se é correto fazer um método como fiz no meu Bean… ele apenas passa pra frente o objeto preenchido, será que isso ta certo ?

[]'s
e obrigado pela ajuda…

Ae agora a estrura do bean ficou legal.

Essa facade seria uma camada entre o objeto DAO e o seu bean? eu não sei até aonde isso é legal, tem um monte de dicussao sobre isso, da uma pesquisada.

Eu uso meus objetos dao com factory mesmo, no seu caso eu colocaria no bean mesmo a instanciação do DAO e mandaria inserir por lá, pois acredito que você colocou uma camada a mais sem necessidade.

Me corrijam se eu estiver errado.

é isso ae rapaz falou.

cara perfeito, muito grato pela sua ajuda… qq coisa só me gritar…

[]'s

e quanto ao facade que coloquei vou pesquisar melhor sim…