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.
W
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
H
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
D
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.
W
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?
W
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?
D
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.