ERRO: Cannot get value for expression

3 respostas
eribeiro

Pessoal, preciso de uma ajuda! ( Não sei se é um tópico repetido pq não achei a ferramenta de busca no fórum )

O seguinte:

Quando tento rodar minha página dá o erro abaixo. Alguém pode me dar uma luz ??? ( estou usando o Exadel )

==================================================
javax.servlet.ServletException: Cannot get value for expression ‘#{draftSampleList.draftList}’

Meu faces.config está assim:

==================================================

<?xml version="1.0"?>




draftSampleList
DraftSampleList
session

draftList
java.util.List



tenho um arquivo JSP que é assim:

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

<f:loadBundle basename=“DraftSampleProperties_pt” var=“prop”/>

   
<h:dataTable id="DraftTable"  rows="5"   value="#{ draftSampleList.draftList}"  var="dl" 
                 headerClass="table-header" width="100%" >

             <h:column>
                <f:facet name="header">
                  Cd
                </f:facet>
                <h:outputText value="#{dl.cdDraftSample}"/>
              </h:column>
             
   </h:dataTable>
   
</h:form>

</f:view>

==================================================

e minha classe DraftSampleList é cfe abaixo:

==================================================

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.List;

import com.sybase.jdbcx.SybDriver;

public class DraftSampleList {

private List<DraftSample> draftList;


public DraftSampleList() {


}


public List<DraftSample> getDraftList() {
    try {
       
        SybDriver sybdriver = (SybDriver) Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
        sybdriver.setVersion(com.sybase.jdbcx.SybDriver.VERSION_5 );
        DriverManager.registerDriver (sybdriver);
        Connection con = null;
   
        PreparedStatement stm = con.prepareStatement(       "select      ..." )
               
   
        stm.setString (1, "DILLARD'S");
   
        ResultSet rs = stm.executeQuery();

       
        while (rs.next()) {

            DraftSample draftSample = new DraftSample();

            draftSample.setCdDraftSample( rs.getInt(0)    );
            draftSample.setCdSampleType ( rs.getInt(1)    );
            draftSample.setDsFactory    ( rs.getString(2) );
            draftSample.setDsCustomer   ( rs.getString(3) );
           
            draftList.add(draftSample);
           
        }       

    } catch (Exception e) {
       
        e.printStackTrace();
       
    }

    return draftList;
}

public void setDraftList(List<DraftSample> draftList) {
    this.draftList = draftList;
}

}

==================================================

3 Respostas

thiago.correa

Cria um método get para a sua lista no teu mBean:

public getDraftList() {
    //codigos para populara lista, por exemplo.
    return draftList;
}
eribeiro

Oi Tiago! Desculpa se eu não entendi muito bem… Mas este método já está ali no mBean DraftSampleList:

public List<DraftSample> getDraftList() {
		try {
			
			SybDriver sybdriver = (SybDriver) Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
			sybdriver.setVersion(com.sybase.jdbcx.SybDriver.VERSION_5 );
			DriverManager.registerDriver(sybdriver);
			
			Properties SysProps = null;
			
			SysProps.put("user","");
			SysProps.put("password","");
			String  url = "jdbc:sybase:Tds::";

			Connection con = DriverManager.getConnection(url,SysProps);
		
			PreparedStatement stm = con.prepareStatement(
					"select ... ";
				    
	    
			stm.setString(1, ""); 
	    
			ResultSet rs = stm.executeQuery();
 
			
			while (rs.next()) {

				DraftSample draftSample = new DraftSample();

				draftSample.setCdDraftSample( rs.getInt(0)    );
				draftSample.setCdSampleType ( rs.getInt(1)    );
				draftSample.setDsFactory    ( rs.getString(2) );
				draftSample.setDsCustomer   ( rs.getString(3) );
				
				draftList.add(draftSample);
				
			}	    

		} catch (Exception e) {
			
			e.printStackTrace();
			
		}

		return draftList;
	}
thiago.correa

Desculpa, havia procurado esse método no teu código e não o encontrei, bom, então possivelmente você está tendo algum erro na hora de conectar no banco. A única maneira de descobrir é ir depurando o código.

P.S.: Conselho, não é uma boa prática colocar criar conexões a partir do Mbean, se possível crie um classe separada para isso!!! Dê uma lida no desing pattern MVC.

Criado 3 de abril de 2007
Ultima resposta 3 de abr. de 2007
Respostas 3
Participantes 2