Erro JSF "EL expression does not evaluate "

3 respostas
T

Ola Pessoal,

Estou com uma duvida neste projeto, que contem dois Manage Bean que se referencian a uma classe Contato do padrao java beans, e o outro manage bean do ContatoDao, o problema acontece na propriedade do botao inserir contato, que reclama a seguinte mensagem: EL expression does not evaluate to expected types for this attribute[u]

gostaria de saber o por que?, e o passo para solução.

Desde já agradeço.

Segue-se o codigo fonte abaixo:

Abraço.

Contato.jsp

<h:form >
       <h1 align="center">Cadastro de Contatos</h1>
       <table align="center">
       
       		<tr>
       			<td><h:outputLabel value="ID:" /></td>
       			<td><h:inputText value="#{contato.id}"/></td>
       		</tr>
       		<tr>
       			<td><h:outputLabel value="Nome:"/></td>
       			<td><h:inputText value="#{contato.nome}"/></td>
       		</tr>
       		<tr>
       			<td><h:outputLabel value="Endereço:"/></td>
       			<td><h:inputText value="#{contato.endereco}"/></td>
       		</tr>
       		<tr>
       			<td><h:outputLabel value="Telefone:"/></td>
       			<td><h:inputText value="#{contato.telefone}"/></td>
       		</tr>
       		
       </table>
       <table align="center">
       		<tr>
       			<td><h:commandButton value="Novo" type="reset"/></td>
       			<td><h:commandButton value="Inserir" action="#{contatoDao.inserir}"/></td>
       			<td><h:commandButton value="Consultar"/></td>
       			<td><h:commandButton value="Alterar"/></td>
       			<td><h:commandButton value="Excluir"/></td>
       		</tr>
       </table>
       	
       
       </h:form >

Contato.java

private long id;
	private String nome;
	private String endereco;
	private String telefone;
 
        // getters and setters

ContatoDao.java

@Override
	public String inserir(Contato contato) {
		// TODO Auto-generated method stub
		Connection con = null;
		String resp = null;
		String sql = null;
		PreparedStatement pstm = null;

		try {

			con = ConnectionFactory.getConnection();

			sql = "insert into contato(nome, endereco, telefone)values(?,?,?)";

			pstm = con.prepareStatement(sql);
			pstm.setString(1, contato.getNome());
			pstm.setString(2, contato.getEndereco());
			pstm.setString(3, contato.getTelefone());

			pstm.executeUpdate();

			resp = "Sucesso";

			return resp;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			resp = "Erro ao Inserir!";
			e.printStackTrace();
			return resp;
		} finally {
			try {
				pstm.close();
			} catch (Exception e) {
			}
			try {
				con.close();
			} catch (Exception e) {
			}
		}
	}

Faces-Config

<faces-config>
	<managed-bean>
		<managed-bean-name>
		contatoDao</managed-bean-name>
		<managed-bean-class>
		br.com.web.dao.ContatoDao</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>
	<managed-bean>
		<managed-bean-name>
		contato</managed-bean-name>
		<managed-bean-class>
		br.com.web.modelo.Contato</managed-bean-class>
		<managed-bean-scope>
		request</managed-bean-scope>
	</managed-bean>

</faces-config>

3 Respostas

yorgan

Olá tiagowmm,
Você está fazendo a implementação de forma errada.´Primeiro que não é aconselhavel você utilizar diretamente o DAO no Faces-config e você também não tem um objeto contato na sua classe DAO. Mas crie um objeto contato dentro do DAO e utilize ele, apenas para os testar.
Algo como:

//Cria um objeto Contato para ser acessado pela JSP
               private Contato contato;
               //get e set


                @Override
	public String inserir() {
		// TODO Auto-generated method stub
		Connection con = null;
		String resp = null;
		String sql = null;
		PreparedStatement pstm = null;

		try {

			con = ConnectionFactory.getConnection();

			sql = "insert into contato(nome, endereco, telefone)values(?,?,?)";

			pstm = con.prepareStatement(sql);
			pstm.setString(1, contato.getNome());
			pstm.setString(2, contato.getEndereco());
			pstm.setString(3, contato.getTelefone());

			pstm.executeUpdate();

			resp = "Sucesso";

			return resp;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			resp = "Erro ao Inserir!";
			e.printStackTrace();
			return resp;
		} finally {
			try {
				pstm.close();
			} catch (Exception e) {
			}
			try {
				con.close();
			} catch (Exception e) {
			}
		}
	}

E na sua JSP:

<tr>   
                <td><h:outputLabel value="ID:" /></td>   
                <td><h:inputText value="#{contatoDAO.contato.id}"/></td>   
            </tr>

[]´s

Daniel

T

valeu , vou testar.

T

[b]Ola Daniel fiz o que você me falou mas nao deu certo o erro ainda continua. Você comentou que este nao é a melhor forma de se implementar, como seria?

Obrigado.[/b]

Criado 15 de setembro de 2008
Ultima resposta 24 de set. de 2008
Respostas 3
Participantes 2