Only a type can be imported

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?

Mostra a sua classe Controle…

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.

<%@ 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.

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

[quote=outt]mais alguém?
não posso empacar aqui, tem muita coisa pra ver ainda.[/quote]
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

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.

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

[]´s

[quote=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.

[/quote]

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

package base;

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

é 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:

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

Olá,

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

[]´s

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

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

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.

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

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

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.