lemes
Julho 11, 2019, 9:32pm
#1
Boa tarde amigos!
Estou desenvolvendo um projeto maven com jsp e jstl, onde o controller envia um ArrayList para o jsp mas o forEach não o percorre. Eu testei o mesmo código com um Dynamic Web Project onde funcionou perfeitamente, então suspeito que pode ser alguma coisa de errado no maven.
Estas são as dependências do pom.xml:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Este é o controller:
OrdemServicoBo bo = new OrdemServicoBo();
List<StatusBean> lista = new ArrayList();
lista = bo.novaOrdemDeServico();
request.setAttribute("lista", lista);
request.getRequestDispatcher("WEB-INF/views/teste.jsp").forward(request, response);
Este é o jsp de teste:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<th>ID</th>
<th>DESCRICAO</th>
</tr>
<c:forEach var="status" items="${lista}">
<tr>
<td>${status.id}</td>
<td>${status.descricao}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Acredito que posso estar errando alguma coisa no pom.xml pois utilizando os jars no Dynamic Web Project funciona perfeitamente, estou pesquisando nos fóruns, blogs e vídeos já há alguns dias e nenhum exemplo da certo.
Desde já agradeço.
lemes
Julho 12, 2019, 7:05pm
#3
Não funcionou, ficou na mesma.
Ao invés de mostrar o valor, ele mostra no navegador ${status.id} e ${status.descricao} dentro da table.
O forEach está repetindo os valores?
lemes
Julho 12, 2019, 7:34pm
#5
Sim, ele mostra no navegador a mesma coisa que é digitado no jsp digitado no eclipse. que são ${status.id} e ${status.descricao}
Manda o web.xml pra gente ver
lemes
Julho 12, 2019, 7:40pm
#7
Este é o web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>OSServlet</servlet-name>
<display-name>OSServlet</display-name>
<description></description>
<servlet-class>br.com.startup.os.servlet.OSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OSServlet</servlet-name>
<url-pattern>/OSServlet</url-pattern>
</servlet-mapping>
</web-app>
E este o pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.startup</groupId>
<artifactId>ordem-servico</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>ordem-servico Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>ordem-servico</finalName>
</build>
</project>
Tente mudar seu web.xml para somente:
<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>OSServlet</servlet-name>
<display-name>OSServlet</display-name>
<description></description>
<servlet-class>br.com.startup.os.servlet.OSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OSServlet</servlet-name>
<url-pattern>/OSServlet</url-pattern>
</servlet-mapping>
</web-app>
E veja se funciona
lemes
Julho 12, 2019, 8:03pm
#9
Não funcionou e o web.xml ficou com um erro na linha abaixo
<display-name>OSServlet</display-name>
Erro:
cvc-complex-type.2.4.a: Invalid content was found starting with
element 'display-name'. One of '{"http://java.sun.com/xml/ns/
javaee":servlet-class, "http://java.sun.com/xml/ns/javaee":jsp-file}'
is expected.
Mudei o web.xml da minha resposta. A treta é que o problema pode ser a forma como o seu web.xml está (a tag DOCTYPE que vc usou). Tente usar a forma como atualizei na resposta.
lemes
Julho 12, 2019, 8:27pm
#11
lemes:
entendi, mas ainda não deu certo, agora o erro foi pra essa linha
<?xml version = '1.0' encoding = 'ISO-8859-1'?>
Erro:
The processing instruction target matching "[xX][mM][lL]" is not allowed.
tente colocar em aspas duplas
<?xml version="1.0" encoding="ISO-8859-1" ?>
Ou tente sem isso para ver se funciona.
lemes
Julho 12, 2019, 8:55pm
#13
Lucas_Camara:
<?xml version="1.0" encoding="ISO-8859-1" ?>
Pois é, também já tentei assim, troquei as aspas e tirei os espaços que estão sobrando e o erro persiste.
Montei um projeto aqui com o código que vc postou e funcionou. Meu web.xml ficou assim:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>OSServlet</servlet-name>
<display-name>OSServlet</display-name>
<description></description>
<servlet-class>br.com.startup.os.servlet.OSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OSServlet</servlet-name>
<url-pattern>/OSServlet</url-pattern>
</servlet-mapping>
</web-app>
O pom.xml ficou assim:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.lucas</groupId>
<artifactId>jstl-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>JSTL Test</name>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
lemes
Julho 12, 2019, 9:52pm
#15
Infelizmente ainda não deu persiste o mesmo erro, eu até criei um novo projeto maven do 0. Só alterei maven.compiler.target para 1.11 pois é a versão do Java que estou utilizando.
Hmmm, agora não sei se a versão do java pode ter algo a ver com esse problema viu. A versão 11 mudou bastante.
Este taglib é diferente do padrão que eu sempre usei
<%@ taglib uri="http://java.sun.com/jstl/ea/core" prefix="c" />
Porém, eu não sei se isso foi alterado, faz séculos que não mexo com isso.
2 curtidas
lemes
Julho 15, 2019, 12:42pm
#18
Esta deu que não existe, mas eu utilizei o mais parecido, que foi este
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
e pelo menos percorreu o for, pois o meu objeto List tem 3 objetos bean dentro dele, mas ao invés de mostrar os dados dentro do bean, ele traz o mesmo código digitado dentro do jsp e escreveu 3 vezes. Dessa maneira
${pessoa.id} ${pessoa.nome}
${pessoa.id} ${pessoa.nome}
${pessoa.id} ${pessoa.nome}
Perai, tenta assim
<c:forEach var="status" items="${lista}">
<tr>
<td><c:out value="${status.id}" /></td>
<td><c:out value="${status.descricao}" /></td>
</tr>
</c:forEach>
1 curtida
lemes
Julho 15, 2019, 1:10pm
#20
Opa, maravilha, agora deu certo, @darlan_machado eu havia tentado desta maneira, mas acho que devo ter errado em alguma outra coisa, que não fez dar certo. Mas agora funcionou 100%.
Agradeço @darlan_machado e @Lucas_Camara pela ajuda.