Tenho uma aplicação web aqui que está usando scriplets na view. Preciso substituir esses scriplets por JSTL.
Eu não manjo de JSTL e eu tenho uma combobox que é populada do banco de dados quando a página é carregada.
Eu possuo um método que retorna uma list com os dados
Uma dica muito importante, quando abrir um tópico, por favor, indique qual o motivo pelo qual a coisa não deu certo. Erro, exception, não roda, etc. Forneça detalhes. Quanto mais informações passar, melhor e mais rápidas serão as respostas.
Para usar JSTL você precisa dos jars desta API. Caso contrário, não conseguirá mesmo.
williamdasflores
drsmachado,
Eu já tenho os jars da API.
Vou postar minha DAO que pega os dados do banco
publicList<Cursos>getListCursos()throwsException{Connectionconn=null;PreparedStatementps=null;ResultSetrs=null;List<Cursos>listCursos=newArrayList<Cursos>();try{StringSQL="SELECT * FROM tbl_curso";conn=this.conn;ps=conn.prepareStatement(SQL);rs=ps.executeQuery();while(rs.next()){IntegercodCurso=rs.getInt(1);StringnomeCurso=rs.getString(2);StringtipoCurso=rs.getString(3);listCursos.add(newCursos(codCurso,nomeCurso,tipoCurso));}returnlistCursos;}catch(Exceptione){thrownewException("Erro no método getListCursos() na classe RequesicaoDAO "+e.getMessage());}finally{ConnectionFactory.closeConnection(conn,ps,rs);}}
Segue a exception lançada ao carregar página
SEVERE:Servlet.service()forservlet[jsp]incontextwithpath[/Sistema-UNICID]threwexception[javax.el.PropertyNotFoundException: Property 'codCurso' not found on type java.lang.String]withrootcausejavax.el.PropertyNotFoundException:Property'codCurso'notfoundontypejava.lang.Stringatjavax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)atjavax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214)atjavax.el.BeanELResolver.property(BeanELResolver.java:325)atjavax.el.BeanELResolver.getValue(BeanELResolver.java:85)atjavax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)atorg.apache.el.parser.AstValue.getValue(AstValue.java:169)atorg.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)atorg.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985)atorg.apache.jsp.cadastrarTutoria_jsp._jspx_meth_c_005fforEach_005f0(cadastrarTutoria_jsp.java:310)atorg.apache.jsp.cadastrarTutoria_jsp._jspService(cadastrarTutoria_jsp.java:171)atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:722)atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:722)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)atorg.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)atorg.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)atjava.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)atjava.lang.Thread.run(Thread.java:662)
J
jgtorres
posta o código da classe cursos, pela stacktrace é q falta o método getCurso
Hebert_Coelho
O erro diz que não conseguiu achar codCurso dentro de Cursos. Você tem um get/set para codCurso?
Property ‘codCurso’ not found on type java.lang.String
drsmachado
jakefrog:
O erro diz que não conseguiu achar codCurso dentro de Cursos. Você tem um get/set para codCurso?
Property ‘codCurso’ not found on type java.lang.String
Na verdade, você está tentando obter o valor de uma propriedade codCurso de uma variável que é identificada como sendo objeto da classe String.
Isso significa que você está lendo a variável errada.
Como você constrói os atributos que passa para que o JSTL capture?
Note que o problema não está na DAO, mas entre a Servlet e a jsp.
williamdasflores
Minha classe Curso é uma bean.
Hoje com os scriplets eu chamo esse método static listCursos na minha View. Mais ou menos assim:
Isso é o que você faz para colocar um objeto como atributo, certo? Seja sessão ou request.
<!-- na jsp --><c:forEachitems="cursos"id="curso"><tr><td>${curso.id}</td><td>${curso.nome}</td></tr></c:forEach>
Isso faz você iterar sobre os cursos e ir escrevendo cada propriedade dele.
Manjou?
williamdasflores
Certo drsmachado entendi.
Agora só mais uma dúvida, como eu tinha dito essa combobox precisa ser populada assim que a página é carregada. O código da servlet eu coloco dentro de um método “service” ou posso utilizar o mesmo método que estou usando?
Como eu faço a chamada desse método na minha view para que a combobox seja populada ao carregar a página?
drsmachado
Para que os objetos estejam disponíveis para a jsp, é preciso que a servlet seja chamada antes e redirecione a requisição, depois de ter realizado as consultas necessárias e tratamentos devidos.
Independente do que você implementa da servlet para cima, ela deve ser chamada e dela deve partir o redirecionamento para a respectiva jsp.