Iniciante em JSF

13 respostas
A

Olá, pessoal. Estou tentando rodar um pequeno código aqui, mas não está dando certo. Sou iniciante em JSF. Alguém pode me ajudar, abaixo segue .jsp, .java, .xml e o erro.

jsp:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>


<f:view>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Entrada de Dados</title>
    </head>
    <body>
        <h:form>
            <h:outputLabel value="Digite seu nome"/>
            <h:inputText value="#{pessoa.nome}" />
            <h:commandButton value="Enviar" action="#{pessoa.enviar}"/>
        </h:form>
        <h1>
            <h:outputText value="Seu nome em maiuculo eh #{pessoa.nome}" rendered="#{pessoa.nome!=NULL}"/>
        </h1>
        
    </body>
</html>
</f:view>

java:

package com.bean;


public class PessoaBean {

    private String nome;
    private int idade;
    private String senha;

    public PessoaBean() {
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

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

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public int getIdade() {
        return idade;
    }

    public String getNome() {
        return nome;
    }

    public String getSenha() {
        return senha;
    }

    public void enviar(){
        this.setNome(this.getNome().toUpperCase());
    }
}

xml:

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 
    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_1_2.xsd">
    <managed-bean>
        <managed-bean-name>pessoa</managed-bean-name>
        <managed-bean-class>com.bean.PessoaBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>

ERRO:

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cant instantiate class: com.bean.PessoaBean.. com.bean.PessoaBean

root cause

javax.faces.FacesException: Cant instantiate class: com.bean.PessoaBean.. com.bean.PessoaBean

root cause

java.lang.ClassNotFoundException: com.bean.PessoaBean

note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_02 logs.

Como sou iniante em jsf, não consegui identificar essa exeção. Alguém poderia me ajudar?

Desde já, agradeço…

13 Respostas

Leandro_M

Cara, se eu não me engano você precisa ter um ActionEvent como parâmetro sempre que chamar o void.

<h:commandButton value="Enviar" action="#{pessoa.enviar}"/>

public void enviar(ActionEvent event){   
        this.setNome(this.getNome().toUpperCase());   
    }

Você recebe o erro em qual momento? Quando "envia" ou quando tenta rodar?

luiz_renato

Sou novato tbm em JSF mas talvez ajude:

Sua tag &lt;h:view&gt; ... &lt;/h:view&gt; deve estar dentro de &lt;body&gt; .. &lt;/body&gt; .

Na versao 2.0 do JSF vc não usa.

E em <h:commandButton value="Enviar" action="#{pessoa.enviar}"/> vc troca action por actionListener.

A

Tentei o seguinte: comentei as linhas

...
            <%--<h:inputText value="#{pessoa.nome}" />--%>
           ...
            <%--<h:outputText value="Seu nome em maiuculo eh #{pessoa.nome}" rendered="#{pessoa.nome!=NULL}"/>--%>
           ...

Rodou exibindo apenas o texto “Digite seu nome” e o botão enviar. Será se o erro está em #{pessoa.nome}. Como eu poderia solucionar isso?

Desde já, agradeço…

P

Primeiro: tag f:view tem que ser dentro do body.

Segundo, não tem necessariamente que ser um método com Parâmetros ActionEvent por ser void.

Em sua action voce pode usar tanto void quanto String, a diferença é que usando método string voce pode redirecionar para outra página no retorno.

Terceiro: Não precisa mudar sua action para actionListener, caso contrário voce terá que colocar o parametro ActionEvent, e não é o motivo do erro.

Por último, não me lembro, mas verifique se ele aceita h:body no lugar de somente body, pode ser isso, se for jsf 2 (provavelmente é), me lembro que tentei usar e dava erro, entao usei h:head.

Reporte ai se der certo, aparentemente o seu problema é na view mesmo.

P

Ah, uma última coisa, seus beans e managed beans devem implementar a interface serializable! Teste ai!

luiz_renato

Bom saber sobre a action.

A
Olá! 
Coloquei a tag f:view dentro do body.
Tentei trocar o body por h:body, mas não aceitou
Implementei a interface serializable.


Ainda está com o mesmo erro.  Olhando o código eu não consigo entender por que está acontencendo isso. O que pode ser?
marcelo.silva

mostra como estão os pacotes, vc está mapeando errado no faces-config

marcelo.silva

e no rendered coloque rendered="#{!empty pessoa.nome}"

P

Cara, certeza que tua view está errada, está usando jsf 2? Se estiver utilize este código no lugar da tua jsp. Se você usa jsf utilize facelets que é muito melhor.

Crie um arquivo.xhtml
teste este código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Exemplo</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </h:head>
    <h:body>
    	<h:form>  
            <h:outputLabel value="Digite seu nome"/>  
            <h:inputText value="#{pessoa.nome}" />  
            <h:commandButton value="Enviar" action="#{pessoa.enviar}"/>  
        </h:form>  
        <h1>  
            <h:outputText value="Seu nome em maiuculo eh #{pessoa.nome}" rendered="#{pessoa.nome!=NULL}"/>  
        </h1>  
    </h:body>
</html>

Poste se deu certo.

A

Fiz o xhtml, mas não deu certo, ou seja, apareceu a página em branco.

Quando eu executo o código que eu postei aqui, aparece o seguinte no browser:

  • o label, o input e o button(enviar)

Quando clico em enviar, aparece

exception javax.servlet.ServletException: #{pessoa.enviar}: javax.el.MethodNotFoundException: Method not found: [email removido]()

Só que existe o método enviar na minha classe PessoaBean.

Continuo usando os mesmos códigos anteriores.

aix

aegospm:
Fiz o xhtml, mas não deu certo, ou seja, apareceu a página em branco.

Quando eu executo o código que eu postei aqui, aparece o seguinte no browser:

  • o label, o input e o button(enviar)

Quando clico em enviar, aparece

exception javax.servlet.ServletException: #{pessoa.enviar}: javax.el.MethodNotFoundException: Method not found: [email removido]()

Só que existe o método enviar na minha classe PessoaBean.

Continuo usando os mesmos códigos anteriores.

Parece falta do arquivo jar da JSTL.

marcelo.silva

Se for jsf 2.0

package com.bean;

@ManagedBean(name=pessoa)

@SessionScoped

public class PessoaBean {
private String nome;  
private int idade;  
private String senha;  

public PessoaBean() {  
}  

public void setIdade(int idade) {  
    this.idade = idade;  
}  

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

public void setSenha(String senha) {  
    this.senha = senha;  
}  

public int getIdade() {  
    return idade;  
}  

public String getNome() {  
    return nome;  
}  

public String getSenha() {  
    return senha;  
}  

public String enviar(){  
    this.setNome(this.getNome().toUpperCase());  
    return null; // Depois mapeie no faces-config a navegação de retorno para sua página
}

}

Criado 23 de julho de 2011
Ultima resposta 23 de jul. de 2011
Respostas 13
Participantes 6