Only a type can be imported

18 respostas
O

Procurei no google e só achei 3 sites abordando tal erro em português, em inglês eram sempre as mesmas respostas: “Verifique a sua estrutura de dados”

como não achei nada, vim pedir ajuda
:slight_smile:

Esse erro esta acontecendo quando tento importar uma classe, vou deixar tudo bem explicado aqui.

Estrutura de arquivos:

testeservlet
—source
—deploy
------testeBD.jsp
------WEB-INF
----------classes
--------------base
-----------------Controle.class

Código JSP:

retirei o máximo de informações desnecessárias pra isolar o erro

<%@ page contentType="text/html" language="java" import="java.sql.*"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@ page import="base.Controle" %>   
<%Controle c = new Controle();%>
<head> 
<title>Teste de Conexão</title> 
</head> 
<body>
</body>

Erro:

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 7 in the generated java file
Only a type can be imported. base.Controle resolves to a package

An error occurred at line: 4 in the jsp file: /deploy/testeBD.jsp

Controle cannot be resolved to a type

1: <%@ page contentType=text/html language=java import=java.sql.*%>

2: 

3: <%@ page import=base.Controle %>

4: <%Controle c = new Controle();%>

5: 

6: Teste de Conexão

7:
An error occurred at line: 4 in the jsp file: /deploy/testeBD.jsp

Controle cannot be resolved to a type

1: <%@ page contentType=text/html language=java import=java.sql.*%>

2: 

3: <%@ page import=base.Controle %>

4: <%Controle c = new Controle();%>

5: 

6: Teste de Conexão

7:
Stacktrace:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)

org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)

org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)

org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Alguma idéia?

18 Respostas

S

Mostra a sua classe Controle…

E

Cara, faz séculos que eu não brinco de código Java dentro da JSP. Vou tentar lembrar pra te ajudar.

Você colocou 2 diretivas @ page na sua JSP. Pode ser que a segunda esteja sendo ignorada.

Tenta substituir essa linha por <% import base.Controle%> ou na primeira linha, como ja tem um import de java.sql.*, acrescentar o teu import.

O

<%@ page contentType=“text/html” language=“java” import=“java.sql.*, base.Controle”%>
fiz dessa forma também não funcionou

Classe Controle: (não tem problema ter objetos dentro dessa classe, porque as duas classes das quais os construtores fazem referência também estão no pacote, ja importei da forma base.* e continua dando erro)

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

public class Controle
{
	BaseCliente bdCliente = new BaseCliente();
	BaseFilmes bdFilme = new BaseFilmes();
	
	public static void main(String[] args)
	{
		AreaDeTrabalho crtl = new AreaDeTrabalho();
	}
	
	public String getData()
	{
		Date hoje = new Date(); 
		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
		return df.format(hoje); 
	}
		public void insereCliente(String n, int i, String end, String dep, String cpf, String ident)
	{
		bdCliente.insere(n,i,end,dep,cpf,ident,"","","","");
	}
	
	public void insereFilme(String n, String ator, String esti, int ano, int qtde)
	{
		bdFilme.insere(n,ator,esti,ano,qtde,qtde,0,"");
	}
	
	public void salvarCamposCliente(String n, int i, String end, String dependentes, String cpf, String rg,int posAtual)
	{
		bdCliente.salvarCampos(n,i,end,dependentes,cpf,rg,posAtual);
	}
	
	public void salvarCamposFilme(String n, String ator, String estilo, int ano, int qtde,int dispon, int posAtual)
	{
		bdFilme.salvarCampos(n,ator,estilo,ano,qtde,dispon,posAtual);
	}
}

quando eu importo com base.* continua dando esse erro
Controle cannot be resolved to a type.

O

mais alguém?
não posso empacar aqui, tem muita coisa pra ver ainda.

J

outt:
mais alguém?
não posso empacar aqui, tem muita coisa pra ver ainda.

desculpe o atraso senhor… mas nem sempre temos tempo e/ou disposição para ajudar, afinal todos aqui fazem isso de graça e apenas com o interesse de ajudar a comunidade…

vamo la então, faça um teste, retire a declaração do import e use sau classe no jsp assim:

base.Controle c = new base.Controle();

se isso não funcionar, tem algum problema na estrutura do seu projeto.

[]´s

O

jgbt

não reclamei do atraso, o problema é que como ja tinha algumas postagens e o tópico estava ficando pra baixo, acaba aparecendo para outros usuários que o tópico ja foi resolvido.

enfim, vou testar sua sugestão.

An error occurred at line: 3 in the jsp file: /deploy/testeBD.jsp
base.Controle cannot be resolved to a type

deu o mesmo problema.

A minha estruta esta definida ali em cima, o que mais além disso falta fazer pra ela ficar correta?
Desconfio que seja isso mesmo, pois os sites em ingles sempre respondiam dessa forma.

J

vc ta usando alguma IDE ou montando o projeto na mão?

[]´s

S

outt:
<%@ page contentType=“text/html” language=“java” import=“java.sql.*, base.Controle”%>
fiz dessa forma também não funcionou

Classe Controle: (não tem problema ter objetos dentro dessa classe, porque as duas classes das quais os construtores fazem referência também estão no pacote, ja importei da forma base.* e continua dando erro)

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

public class Controle
{
	BaseCliente bdCliente = new BaseCliente();
	BaseFilmes bdFilme = new BaseFilmes();
	
	public static void main(String[] args)
	{
		AreaDeTrabalho crtl = new AreaDeTrabalho();
	}
	
	public String getData()
	{
		Date hoje = new Date(); 
		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
		return df.format(hoje); 
	}
		public void insereCliente(String n, int i, String end, String dep, String cpf, String ident)
	{
		bdCliente.insere(n,i,end,dep,cpf,ident,"","","","");
	}
	
	public void insereFilme(String n, String ator, String esti, int ano, int qtde)
	{
		bdFilme.insere(n,ator,esti,ano,qtde,qtde,0,"");
	}
	
	public void salvarCamposCliente(String n, int i, String end, String dependentes, String cpf, String rg,int posAtual)
	{
		bdCliente.salvarCampos(n,i,end,dependentes,cpf,rg,posAtual);
	}
	
	public void salvarCamposFilme(String n, String ator, String estilo, int ano, int qtde,int dispon, int posAtual)
	{
		bdFilme.salvarCampos(n,ator,estilo,ano,qtde,dispon,posAtual);
	}
}

quando eu importo com base.* continua dando esse erro
Controle cannot be resolved to a type.

Pelo que pude perceber, sua classe Controle não está dentro do pacote base.

package base;
R

Olá,

Eu não vi a declaração de package em sua classe.
está “package base”? ou não existe mesmo?

edit: ops, não vi que o Sergio já tinha comentado a esse respeito. :oops:

[]´s

O

é verdade.
não tem mesmo, me lembrei agora que quando eu botei
package base;
tinha dado um erro.

mas agora eu botei

//Apenas Inicio da Classe Controle
package base;

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

public class Controle
{

o .java (erronameante) esta em …\webapps\testeservlet\deploy\WEB-INF\classes
quando compilada cria a pasta base com os .class dentro

continua dando o mesmo erro.
:frowning:

O

tem como me passar um exemplo que use importaçao bem simples, com toda a estrutura?
assim eu posso isolar mais o erro.

R

Olá,

Coloque sua pasta WEB-INF dentro de “testeservlet”. Ela é a raiz de sua app não é?

[]´s

O

cara eu to bem no inicio ainda JSP, to custando a aprender mais porque quero fazer essa importaçao.
Então qualquer coisa que parecer óbvia que eu ja tenha feito pode falar.

onde eu declaro a raiz da app?
não tem raiz nenhuma, eu apenas botei as pastas como disse ali

e digitei localhost:8080/e o caminho até a jsp.

não entendo muito bem de contexto nem do web.xml

R

faça o teste como sugeri e veja o que acontece.

Seria interessante você ler um pouco mais sobre o assunto. Tem bastante material introdutorio que explica inclusive a estrutura de diretorios correta para um app web.

[]´s

O

não creio que ira fazer diferença, porque essa estrutura eu peguei lendo de um tutorial.
ele encontra o arquivo, o problema é que não encontra a classe Controle.

mas de qualquer forma vou tentar mais tarde quando tiver acesso ao meu computador.

O

tentei fazer isso mas não funcionou, erro 404.

foi quando eu decidi apelar pro inexplicavel, fiz uma nova pasta, joguei tudo dentro, acessei por essa nova pasta e funcinou

:?

que locura foi esse eu não entendi e nem quero entender
uHAOUIAHOIAU

eu nem to acreditando

S

Limpe a pasta work do Tomcat, e recompile seu projeto.

T

Amigo, esse errou deu comigo há CINCO minutos, então, é só traduzir o inglês.

O que aconteceu aqui foi o seguinte, eu tinha um pacote no meu web-inf/classes já, exemplo “Pacote1”, e agora, tinha cabado de adicionar o “Pacote2”, então, PARECE que pra utilizar o Pacote2 eu tinha que deletar o Pacote1 da pasta, pelo menos isso fez com que funcionasse a importação e etc.

Abraços, até mais.

Criado 20 de dezembro de 2007
Ultima resposta 20 de jan. de 2009
Respostas 18
Participantes 6