5
respostas

Não estou conseguindo listar os dados vindo do banco de dados na tabela no JSP

Pessoal já tentei de varias formas e não consigo listar os dados na tabela vou deixar o erro e os codigos a baixo se alguem puder me ajudar é pro trabalho da faculdade proxima semana.

Erro:

SEVERE: Servlet.service() for servlet [jsp] threw exception
javax.el.PropertyNotFoundException: N�o foi poss�vel localizar a propriedade [tipoConteudo] no tipo [java.lang.String]
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:253)
    at javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:206)
    at javax.el.BeanELResolver.property(BeanELResolver.java:322)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:93)
    at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:125)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:168)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:690)
    at org.apache.jsp.admin_jsp._jspx_meth_c_005fforEach_005f0(admin_jsp.java:266)
    at org.apache.jsp.admin_jsp._jspService(admin_jsp.java:174)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:661)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:425)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:357)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:294)
    at br.com.cine.model.bean.ListarConteudoBean.execute(ListarConteudoBean.java:39)
    at br.com.cine.controller.CineController.service(CineController.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:1623)
5 respostas
SEVERE: Servlet.service() for servlet [br.com.cine.controller.CineController] in context with path [/proj-cine] threw exception [An exception occurred processing [admin.jsp] at line [41]

38:                     <tbody>
39:                    <c:forEach items="${conteudo}" var="conteudo">
40: 					    <tr>
41: 					        <td>${conteudo.tipoConteudo.descricao}</td>
42: 					        <td>${conteudo.titulo}</td>
43: 					        <td>${conteudo.descricao}</td>
44: 					        <td>${conteudo.duracao}</td>


Stacktrace:] with root cause
javax.el.PropertyNotFoundException: N�o foi poss�vel localizar a propriedade [tipoConteudo] no tipo [java.lang.String]
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:253)
    at javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:206)
    at javax.el.BeanELResolver.property(BeanELResolver.java:322)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:93)
    at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:125)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:168)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:690)
    at org.apache.jsp.admin_jsp._jspx_meth_c_005fforEach_005f0(admin_jsp.java:266)
    at org.apache.jsp.admin_jsp._jspService(admin_jsp.java:174)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:661)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:425)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:357)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:294)
    at br.com.cine.model.bean.ListarConteudoBean.execute(ListarConteudoBean.java:39)
    at br.com.cine.controller.CineController.service(CineController.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:1623)

Codigo:

@Entity
@Table(name = "conteudos")
public class Conteudo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "conteudo_id")
    private Long id;

    @Column(name = "titulo")
    @NotBlank(message = "O campo titulo não pode ser vazio")
    private String titulo;

    @Column(name = "descricao")
    @NotBlank(message = "O campo descrição não pode ser vazio")
    private String descricao;

    @Column(name = "diretor")
    @NotBlank(message = "O campo diretor não pode ser vazio")
    private String diretor;

    @Column(name = "duracao")
    private Integer duracao;

    @Column(name = "temporadas")
    private Integer temporadas;

    @Column(name = "genero")
    private String genero;

    @Column(name = "data_de_lancamento")
    private LocalDate dataDeLancamento;

    @Column(name = "url_img")
    @NotBlank(message = "O campo de url de imagem não pode ser vazio")
    private String urlImg;

    @Column(name = "url_trailer")
    @NotBlank(message = "O campo de url do trailer não pode ser vazio")
    private String urlTrailer;

    @Column(name = "ativo")
    @NotNull(message = "O campo ativo não pode ser nulo")
    private Boolean ativo;

    @Column(name = "tipo_conteudo")
    private TipoConteudo tipoConteudo;

    @Column(name = "avaliacao_id")
    @OneToMany
    private List<Avaliacoes> listAvaliacoes;

    public Conteudo(String titulo, String descricao, String diretor, Integer duracao, Integer temporadas, String genero,
            LocalDate dataDeLancamento, String urlImg, String urlTrailer, TipoConteudo tipoConteudo) {
        this.titulo = titulo;
        this.descricao = descricao;
        this.diretor = diretor;
        this.duracao = duracao;
        this.temporadas = temporadas;
        this.genero = genero;
        this.dataDeLancamento = dataDeLancamento;
        this.urlImg = urlImg;
        this.urlTrailer = urlTrailer;
        this.ativo = true;
        this.tipoConteudo = tipoConteudo;
    }

    public Conteudo() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public TipoConteudo getTipoConteudo() {
        return tipoConteudo;
    }

    public void setTipoConteudo(TipoConteudo tipoConteudo) {
        this.tipoConteudo = tipoConteudo;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescricao() {
        return descricao;
    }

    public Integer getDuracao() {
        return duracao;
    }

    public void setDuracao(Integer duracao) {
        this.duracao = duracao;
    }

    public Integer getTemporadas() {
        return temporadas;
    }

    public void setTemporadas(Integer temporadas) {
        this.temporadas = temporadas;
    }

    public List<Avaliacoes> getListAvaliacoes() {
        return listAvaliacoes;
    }

    public void setListAvaliacoes(List<Avaliacoes> listAvaliacoes) {
        this.listAvaliacoes = listAvaliacoes;
    }

    public String getDiretor() {
        return diretor;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public LocalDate getDataDeLancamento() {
        return dataDeLancamento;
    }

    public void setDataDeLancamento(LocalDate dataDeLancamento) {
        this.dataDeLancamento = dataDeLancamento;
    }

    public String getUrlImg() {
        return urlImg;
    }

    public void setUrlImg(String urlImg) {
        this.urlImg = urlImg;
    }

    public String getUrlTrailer() {
        return urlTrailer;
    }

    public void setUrlTrailer(String urlTrailer) {
        this.urlTrailer = urlTrailer;
    }

    public Boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }

    @Override
    public String toString() {
        return "Conteudo [id=" + id + ", titulo=" + titulo + ", descricao=" + descricao + ", diretor=" + diretor
                + ", duracao=" + duracao + ", temporadas=" + temporadas + ", genero=" + genero + ", dataDeLancamento="
                + dataDeLancamento + ", urlImg=" + urlImg + ", urlTrailer=" + urlTrailer + ", ativo=" + ativo
                + ", tipoConteudo=" + tipoConteudo + " ]";
    }
}
public enum TipoConteudo {
    FILME("Filmes"),
    SERIE("Series");

    private String descricao;

    private TipoConteudo(String descricao) {
        this.descricao = descricao;
    }

    public String getDescricao() {
        return descricao;
    }

    // Método estático para buscar um valor pelo nome
    public static TipoConteudo buscarPorDescricao(String descricao) {
        for (TipoConteudo tipo : values()) {
            if (tipo.descricao.equalsIgnoreCase(descricao)) {
                return tipo;
            }
        }
        throw new IllegalArgumentException("Tipo de conteúdo não encontrado para a descrição: " + descricao);
    }
}
public class ConteudoRepository implements IConteudoRepository {

    @Override
    public void cadastrar(Conteudo conteudo) throws SQLException {
        TransacaoUtil.executarTransacao(maneger -> maneger.persist(conteudo));
    }

    @Override
    public Optional<Conteudo> buscarPeloID(long id) throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(manager -> {
            return Optional.ofNullable(
                    manager.createQuery("select c from Conteudo c where c.id = :id and c.ativo = true", Conteudo.class)
                            .setParameter("id", id).getSingleResult());
        });
    }
    
    @Override
    public List<Conteudo> listarConteudos() throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(manager -> {
            return manager.createQuery("select c from Conteudo c where c.ativo = true", Conteudo.class).getResultList();
        });
    }
 
    @Override
    public List<Conteudo> listarFilmes() throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(manager -> {
            return manager.createQuery("select c from Conteudo c where c.ativo = true", Conteudo.class).getResultList();
        });
    }
    
    @Override
    public List<Conteudo> listarTop10Filmes() throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(maneger -> {
            return maneger.createQuery("SELECT DISTINCT c FROM Conteudo c " +
                                        "JOIN c.listAvaliacoes a " +
                                        "GROUP BY c " +
                                        "ORDER BY AVG(a.classificacao) DESC " +
                                        "LIMIT 10 ", Conteudo.class).getResultList();
        });
    }
        
    @Override
    public List<Conteudo> listarSeries() throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(manager -> {
            return manager.createQuery("select c from Conteudo c where c.ativo = true", Conteudo.class).getResultList();
        });
    }
    
    @Override
    public List<Conteudo> listarTop10Series() throws SQLException {
        return TransacaoUtil.executarTransacaoComRetorno(maneger -> {
            return maneger.createQuery("SELECT DISTINCT c FROM Conteudo c " +
                                       "JOIN c.listAvaliacoes a " +
                                       "GROUP BY c " +
                                       "ORDER BY AVG(a.classificacao) DESC " +
                                       "LIMIT 10", Conteudo.class).getResultList();
        });
    }

    @Override
    public void alterar(Optional<Conteudo> conteudo) throws SQLException {
        TransacaoUtil.executarTransacao(maneger -> maneger.merge(conteudo));
    }

    @Override
    public void excluirPeloID(Long id) throws SQLException {
        TransacaoUtil.executarTransacao(maneger -> {
            Conteudo conteudo = maneger.find(Conteudo.class, id);
            conteudo.setAtivo(false);
            maneger.merge(conteudo);
        });

    }

}
public class ConteudoService {
    private ConteudoRepository conteudoRepository;
    
    public ConteudoService() {
        this.conteudoRepository = new ConteudoRepository();
    }
    
    public void cadastrar(Conteudo conteudo) throws SQLException {
        conteudoRepository.cadastrar(conteudo);
    }
    
    public Optional<Conteudo> buscarPeloID(Long id) throws SQLException {
        return conteudoRepository.buscarPeloID(id);
    }
    
    public List<Conteudo> listarConteudo() throws SQLException {
        return conteudoRepository.listarConteudos();
    }
    
    public List<Conteudo> listarFilmes() throws SQLException {
        return conteudoRepository.listarFilmes();
    }
    
    public void listarSeries()throws SQLException {
        conteudoRepository.listarSeries();
    }
    
    public void alterar(Optional<Conteudo> conteudo) throws SQLException {
        conteudoRepository.alterar(conteudo);
    }
    
    public void excluir(Long id) throws SQLException {
        conteudoRepository.excluirPeloID(id);
    }
}
@WebServlet(urlPatterns = "/cine")
public class CineController extends HttpServlet{
private static final long serialVersionUID = 1L;
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");
                
        String fqn = null;
        System.out.println(action);

        if (action != null) {
            fqn = "br.com.cine.model.bean." + Character.toUpperCase(action.charAt(0)) + action.substring(1);
            System.out.println(fqn);
        } else {
            throw new IllegalArgumentException("Nenhuma ação foi informada!");
        }

        try {
            Class<?> classe = Class.forName(fqn);
            Constructor<?> constructor = classe.getDeclaredConstructor(HttpServletRequest.class, HttpServletResponse.class);
            TipoAcao tipoAcao = (TipoAcao) constructor.newInstance(req, resp);
            tipoAcao.execute();
        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException
                    | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            throw new ServletException(e);
        }
    }
}


public class ListarConteudoBean implements TipoAcao {

    private HttpServletRequest req;
    private HttpServletResponse resp;

    public ListarConteudoBean(HttpServletRequest req, HttpServletResponse resp) {
        this.req = req;
        this.resp = resp;
    }

    @Override
    public void execute() throws ServletException, IOException {

        var service = new ConteudoService();

        List<Conteudo> listConteudo = null;
        try {
            listConteudo = service.listarConteudo();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        this.req.setAttribute("conteudo", listConteudo);

        RequestDispatcher dispatcher = this.req.getRequestDispatcher("/admin.jsp");
        dispatcher.forward(this.req, this.resp);

    }

}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.List, br.com.cine.model.entities.Conteudo"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<c:url value="/cine?action=ListarConteudoBean" var="conteudo" />
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.7/css/dataTables.bootstrap5.min.css">
<link rel="stylesheet" href="styles.css">
<title>Insert title here</title>
</head>
<body>
    </header>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-10">
                <h1 class="display-5 mb-4">Listagem</h1>
                <table id="dataTable" class="table table-dark table-striped table-hover">
                    <thead>
                        <tr>
                            <th>Categoria</th>
                            <th>Título</th>
                            <th>Descrição</th>
                            <th>Duração</th>
                            <th>Diretor</th>
                            <th>Data de lançamento</th>
                            <th>Gênero</th>
                            <th>URL da imagem</th>
                            <th>URL do trailer</th>
                            <th>Ações</th>
                        </tr>
                    </thead>
                    <tbody>
                   <c:forEach items="${conteudo}" var="conteudo">
                        <tr>
                            <td>${conteudo.tipoConteudo.descricao}</td>
                            <td>${conteudo.titulo}</td>
                            <td>${conteudo.descricao}</td>
                            <td>${conteudo.duracao}</td>
                            <td>${conteudo.diretor}</td>
                            <td>${conteudo.urlImg}</td>
                            <td>${conteudo.urlTrailer}</td>
                            <td>
                                <button class="edit">Editar</button>
                                <button class="delete">Excluir</button>
                            </td>
                        </tr>
                    </c:forEach>

                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
    <script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.13.7/js/dataTables.bootstrap5.min.js"></script>
    <script>
        $(document).ready(function () {
            $('#dataTable').DataTable({
                "theme": "dark",
                "language": {
                  "url": "//cdn.datatables.net/plug-ins/1.11.3/i18n/pt_br.json"
                }
            });
        });
    </script>
</body>
</html>

Oi

Os erros são nossos melhores amigos nessa hora. Vendo erro que você postou, parece que o JSP está tendo dificuldades em encontrar a propriedade tipoConteudo no tipo java.lang.String.

Encontrei o erro no teu JSP:

<td>${conteudo.tipoConteudo.descricao}</td>

O erro sugere que ${conteudo.tipoConteudo} está sendo tratado como uma string e não como um objeto. Certifique-se de que tipoConteudo está sendo corretamente inicializado e que a classe TipoConteudo está sendo utilizada como esperado.

Você pode tentar adicionar algumas verificações para garantir que tipoConteudo não seja nulo antes de acessar sua propriedade descricao. Algo assim:

<td>${conteudo.tipoConteudo != null ? conteudo.tipoConteudo.descricao : ''}</td>

Porque assim vc evita o erro se tipoConteudo for nulo. Se não resolver, pode ser necessário verificar a forma como tipoConteudo está sendo populado no seu código Java.

Pode ler aqui também que tem várias dicas pra te ajudar - https://stackoverflow.com/questions/8577545/javax-el-propertynotfoundexception-property-foo-not-found-on-type-com-example