Ajuda! Cadastro com JSF + mysql

11 respostas
V

olá pessoal, to com um problema e não to conseguindo encontrar o erro!!!
o metodo de cadastrar quanto faço manualmente funciona, mas quando tento cadastrar a partir da minha pagina não estou conseguindo, alguém pode ajudar?! segue o codigo:

método que cadastra:

public void cadastrar(Funcionario f) throws SQLException{                  
	        Conexao conexao = Conexao.getInstance();
            Connection con = conexao.getConnection();       
           
            System.out.println("Executando instrucao de insercao: " );            
            con.setAutoCommit(false);
            PreparedStatement pstm = con.prepareStatement("insert into funcionario(nome,sexo,cidade) values(?,?,?)");
                        
            pstm.setString(1,f.getNome());
            pstm.setString(2,f.getSexo());
            pstm.setString(3,f.getCidade());                      
            pstm.executeUpdate();
            con.commit();
            con.close();                    
     }

Fiz uma outra classe (FuncionarioBack) que que chama método da Dao e que retorna uma String para o faces-config:

public String cadastrar() throws SQLException{
		try{	
			
			funcionarioDao.Cadastrar(funcionario);
			System.out.println("Cadastrado!");
			saida = "sucesso";
			
		}catch(SQLException e){
			System.out.println("erro ao chamar a DAO");
			saida = "falha";
		}
		return saida;
	}

Minha página:

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
	<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
	<html>
	<f:view>
		<head>
			<title></title>
		</head>
		<body>
			<h:form style="border: 1px solid rgb(51, 51, 51); background-color: rgb(204, 204, 204); height: 390px; left: 264px; top: 200px; position: absolute; width: 408px">
				
			    <h3> Cadastro de Funcionario. </h3>		    
							    
				<h:outputLabel for ="nome" value="Nome: " />
				<h:inputText id="nome" value="#{funcionario.nome}" required="true" />
				<h:message for="nome" style="color:red" />			 	
				<br>
				<h:outputLabel for = "sexo" value="Sexo:" />
				<h:inputText id="sexo" value="#{funcionario.sexo}" required="true" />
				<h:message for="sexo"></h:message>
				<br>
				<h:outputLabel for = "cidade" value="Cidade:" />
				<h:inputText id="cidade" value="#{funcionario.cidade}"/> 			
				<h:commandButton value="Cadastrar" action="#{funcionarioBack.Cadastrar}" /> <br>
				
			</h:form>	
			
		</body>
	</f:view>
</html>

*editado. Tag code adicionada

11 Respostas

Jair_Rillo_Junior

Primeiramente, sempre use a tag CODE.

E segundo, poste o erro que está acontecendo.

Marky.Vasconcelos

E terceiro.

Use a convenção de códigos.

Começe nome de métodos com letras minusculas.

Isso ajuda a entender o código.

V

Quando clico no botão “Cadastrar” ele não aparece nenhuma pagina de erro, simplismente fica na mesma pagina de cadastro e todos os campos preenchidos, no entanto, aparece a mensagem da classe FuncionarioBack (“erro ao chamar a Dao”) não realizando o cadastro!

marcosharbs

seria bom se vc postasse o erro que acusa no ecplise ou o log do container web e nesse metodo aqui:

public String Cadastrar() throws SQLException{   
        try{       
               
            funcionarioDao.Cadastrar(funcionario);   
            System.out.println("Cadastrado!");   
            saida = "sucesso";   
               
        }catch(SQLException e){   
            System.out.println("erro ao chamar a DAO");   
            saida = "falha";   
        }   
        return saida;   
    }

vc retorna uma string nesse metodo, mas a declaracao da variavel nao esta no metodo, essa variavel é atributo da sua classe?

marcosharbs

onde q vc esta instranciando funcionario dao e funcionario?
ali no seu try/catch onde vc colocou :

System.out.println("erro ao chamar a DAO");

coloque também:

e.printStrackTrace();

assim ele vai imprimir no console o erro que esta acontecendo, ai cole esse erro auqi pra nois.

V

Marcos, a String chamada “saida” eu tinha declarado no inicio da classe, assim como o funcionarioDao e funcionario eu declarei no construtor da classe… entao depois percebi uma coisa… na minha classe FuncionarioBack eu fiz um getFuncionario e setFuncionario, entao quando estava declarando na minha pagina “Funcionario.jsp” estava fazendo o seguinte: “funcionario.nome”, entao alterei isso para: “funcionarioBack.funcionario.nome” e cadastrou!!!
Na minha classe funcionario só tenho os gets e sets, e na classe FuncionarioBack realizo as operações de Funcionario, obrigado pela ajuda!!

D

Oi, no meu caso, eu não consigo submeter o form de cadastro se o campo for do tipo text lá no banco e não receber nenhum tamanho definido.

O form está assim.
<h:form>
                <p>
                    <h:outputText value="#{msgs.tituloAdicionar}" styleClass="titulos"/>
                </p>
                <h:panelGrid columns="3">
                    
                    <%-- campo do nome, associado ao inputNome de pessoaBack --%>
                    <h:outputText value="#{msgs.promptNome}"
                                  styleClass="labelsForms"/>
                    <h:inputText id="title" 
                                 required="true" requiredMessage="* Até 40 caracteres"
                                 binding="#{pessoaBack.inputTitle}"
                                 styleClass="inputsForms">
                        <f:validateLength maximum="40"/>
                    </h:inputText>
                    <h:message for="title" styleClass="erroValidacao"/>
                    
                    <%-- campo do sobrenome, associado ao inputSobrenome de pessoaBack --%>
                    <h:outputText value="#{msgs.promptSobrenome}"
                                  styleClass="labelsForms"/>
                    <h:inputText id="noticia" 
                                 required="true" requiredMessage="Preencha este campo!"
                                 binding="#{pessoaBack.inputNoticia}"
                                 styleClass="inputsForms">
                        <f:validateLength maximum="45"/>  <!-- se eu retirar não submete o form -->
                    </h:inputText>
                    <h:message for="noticia" styleClass="erroValidacao"/>  <!-- se eu retirar não submete o form -->
                </h:panelGrid>
                
                <%-- 
                    executa o listener de adição e direciona pelo action
                    Ã  página correta 
                --%>
                <p>
                    <h:commandButton value="#{msgs.promptAdicionar}"
                                     actionListener="#{pessoaBack.adicionar}"
                                     action="#{pessoaBack.act}"
                                     styleClass="inputsForms"/>
                    <h:commandButton value="#{msgs.promptCancelar}"
                                     immediate="true"
                                     action="cancelar"
                                     styleClass="inputsForms"/>
                </p>
            </h:form>

Preciso deste exemplo, pois é muito eficaz e uso este mesmo form na página de alteração.

Obrigado.

V

Na classe PessoaBack crie uma instancia de Pessoa e o getPessoa() e setPessoa(Pessoa pessoa). Então no seu Form faça a chamada da seguinte forma: PessoaBack.pessoa.nome, por exemplo.
o que eu entendi eh que vc não ta conseguindo capturar os inputs! tenta isso aí. vlw.

D

Vou verificar.
Respondo quando terminar.

Mas também postei no JavaFree. O exemplo está mais completo.

http://javafree.uol.com.br/topic-872576-JSF-Minha-pagina-nao-esta-cadastrando.html

Obrigado.

C

No meu caso, a página de cadastro não mostra os componentes, acho que configurei algo errado:

<h:form>
                    
                     <span class="title">Informações Básicas</span>
                     <p>
                         
                     <h:outputText value="Nome: "/>
                     
                     <h:inputText id="nome" value="#{user.nome}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="nome" styleClass="erroValidacao"/>
                    
                     <br />
                     
                     <h:outputText value="Sobrenome: "/>
                     <h:inputText id="sobrenome" value="#{user.sobrenome}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="sobrenome" styleClass="erroValidacao"/>
                     
                     <br />
                     
                     <h:outputText value="Email: "/>
                     <h:inputText id="email" value="#{user.email}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="email" styleClass="erroValidacao"/>
                     
                     <br />
                     
                     <h:outputText value="Re-digite seu Email: "/> 
                    <%-- <h:inputText id="reemail" value="#{user.reemail}" required="true" 
                       validator="#{user.validateEmail}">
                         <f:validateLength maximum="45"/>
                     </h:inputText> --%>
                     <br />
                     
                     <h:outputText value="Telefone: "/> 
                     <h:inputText id="fone" value="#{user.fone}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="fone" styleClass="erroValidacao"/>
                     
                     <br />
                     
                     <h:outputText value="Endereço: "/> 
                     <h:inputText id="endereco" value="#{user.endereco}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="endereco" styleClass="erroValidacao"/>
                     
                     <br />
                     
                     <h:outputText value="Complemento: "/>
                     <h:inputText id="complemento" value="#{user.complemento}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="complemento" styleClass="erroValidacao"/>
                     <br />
                     
                     <h:outputText value="Cidade: "/> 
                     <h:inputText id="cidade" value="#{user.cidade}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="cidade" styleClass="erroValidacao"/>
                     <br />
                     
                     <h:outputText value="Estado: "/> 
                     <h:inputText id="estado" value="#{user.estado}" required="true">
                         <f:validateLength maximum="45"/>
                     </h:inputText>
                     <h:message for="estado" styleClass="erroValidacao"/>
                     
                     <br />
                     <br />
                     <br />

                     <span class="title">Informações Adicionais</span>
                     <p>
                     <h:outputText value="Categorias de trabalho: "/>
                     
                     <p>
                     <h:selectBooleanCheckbox id="ok" required="true" 
                              requiredMessage="Você precisa estar de acordo com os termos" />
                       <h:outputText value=" Estou de acordo com o regulamento."/>
                       <br />
                       <h:message for="ok" styleClass="erroValidacao"/>
                  
                  <p>
                  <br />
                  <h:commandButton action="#{user.cadastroUser}" value="" styleClass="botCadastro"/>
               
                 </h:form>
o bean
public class Cadastro {
    
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

public Cadastro() {
    
}

    public void cadastroUser(User user) {
        try {
            conn = Conexao.getConexao();
            pstmt = conn.prepareStatement("INSERT INTO users001 ("+
                    "firstname, lastname, email, phone, street, complement, city, state, rate) "+
                    " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?");
            pstmt.setObject(1, user.getNome());
            pstmt.setObject(2, user.getSobrenome());
            pstmt.setObject(3, user.getEmail());
            pstmt.setObject(4, user.getFone());
            pstmt.setObject(5, user.getEndereco());
            pstmt.setObject(6, user.getComplemento());
            pstmt.setObject(7, user.getCidade());
            pstmt.setObject(8, user.getEstado());
            pstmt.setObject(9, user.getCategoria());
            
            pstmt.execute();
            
            // aqui redireciona pra outra página
            
        } catch (SQLException sqlex) {
            sqlex.getMessage();
           // return "cadastroError";
        }
       // return "cadastroOK";
    }

...
faces-config
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!--     Página de cadastro    -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!--
<navigation-rule>
        <from-view-id>/cadastro.jsp</from-view-id>
        <navigation-case>
            <from-outcome>emailCadastrado</from-outcome>
            <to-view-id>/emailNo.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>cadastroOK</from-outcome>
            <to-view-id>/cadastroOK.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>cadastroError</from-outcome>
            <to-view-id>/cadastroError.jsp</to-view-id>
        </navigation-case>
</navigation-rule>
-->

<managed-bean>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>userBean.Cadastro</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Por favor, me expliquem o que fiz de errado.
Obrigado.

* edit:

exception encontrada: javax.faces.FacesException: org.apache.jasper.el.JspPropertyNotFoundException: /cadastro.jsp(332,21) '#{user.nome}' Property 'nome' not found on type userBean.Cadastro
at javax.faces.component.UIOutput.getValue(UIOutput.java:176)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:189)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:320)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)

Não entendo, pensei que em void cadastroUser(User user) { eu chamava a classe User com os getters e settes, mas parece que a excessão lancada ocorre aqui.

D

Eu peguei este exemplo e sobreescrevi em apenas uma classe, ou seja, a classe user, com os getters e setters está dentro da mesma classe de cadastro.

Mesmo assim não consegui fazer executar corretamente.

Criado 16 de janeiro de 2009
Ultima resposta 4 de abr. de 2009
Respostas 11
Participantes 6