Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Erro no sumarioPath.

Boa tarde,

Os sumários estão sendo gravados com sucesso, contudo o problema esta na listagem deles. Exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/produtos/lista.jsp at line 62

59:

${produtos.nome}
60:
${produtos.descricao}
61:
<c:url value='/${product.sumarioPath}' />
62:
<a href="<c:url value='/${produtos.summaryPath}'/>" 63: target="_blank">sumário
64: 
65:

Produtos Controller

  public ModelAndView gravar(MultipartFile sumario,@Valid Produtos produto, BindingResult result,
                RedirectAttributes redirectAttributes) {

        new FileSaver();
        System.out.println(sumario.getOriginalFilename());

        if(result.hasErrors()) {
            return cadastro(produto);
        }


        String path = fileSaver.write("WEB-INF/views/produtos/arquivos-sumario", sumario);
        produto.setSumarioPath(path);


        produtoDao.gravar(produto);


        redirectAttributes.addFlashAttribute("sucesso","Produto cadastrado com sucesso!");

        return new ModelAndView("redirect:produtos");


    }

FileSaver

iinsira seu código apackage br.com.oncolor.infra;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Component
public class FileSaver {

    @Autowired
    private HttpServletRequest request;

    public String write(String baseFolder, MultipartFile file) {
        try {
            String realPath = request.getServletContext().getRealPath("/"+ baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

            return baseFolder+ "/" + file.getOriginalFilename();

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);
        } 
    }

}

OBS:está duplicado,pois há +/-5 dias sem resposta

11 respostas

Oi Nilton,

eu achei estranho que vc usou uma vez:

<c:url value='/${product.sumarioPath}' />

e outra vez:

"<c:url value='/${produtos.summaryPath}'/>"

Deve ser produtos ou product?

abs

Boa tarde professor, foi erro meu, seria produtos,estou acompanhando a video aula e tmb com o livro Springmvc da casa do codigo,ai acabei embaralhando os 2.

Agora a pagina carrega,mas as imagens dos livros ñ, aparece apenas o sumário


Lista.jsp


    <table>
        <tr>
        <td>Título</td>
        <td>Descrição</td>
        <td>Imagem</td>
        </tr>

        <c:forEach items="${produtos}" var="produtos">
                <tr>
                    <td>${produtos.nome}</td>
                    <td>${produtos.descricao}</td>
                    <td><c:url value='/${produtos.sumarioPath}' /></td>
                    <td><img  src="<c:url value='/${produtos.sumarioPath}' />"></td>
                        tmb tentei deste jeito
                 <td><img  src="/${produtos.sumarioPath}"></td>
                </tr>

            </c:forEach>
    </table>

AppWebConfiguration

@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { 
            registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
            registry.addResourceHandler("/WEB-INF/views/produtos/arquivos-sumario/**").addResourceLocations("/imagens/WEB-INF/views/produtos/imagens/");
        }

        @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
            configurer.enable(); }

Oi Nilton,

as imagens não podem ficar n diretório /WEB-INF/... pois ele não é acessível pela requisição HTTP (não é permitido pela especificacao servlets).

Grave as imagens em uma pasta fora do /WEB-INF/...., por exemplo na pasta /resources/imagens e tente novamente.

Tudo bem?

abs

Mudei professor,porém continua a mesma coisa.


Produtos

private String sumarioPath;
public String getSumarioPath() {
        return sumarioPath;
    }

public void setSumarioPath(String sumarioPath) {
        this.sumarioPath = sumarioPath;
    }

Lista

    <table>
        <tr>
        <td>Título</td>
        <td>Descrição</td>
        <td>Imagem</td>
        </tr>

        <c:forEach items="${produtos}" var="produtos">
                <tr>
                    <td>${produtos.nome}</td>
                    <td>${produtos.descricao}</td>
                    <td><c:url value='/${produtos.sumarioPath}' /></td>
                    <td><img  src="/${produtos.sumarioPath}"></td>
                </tr>

            </c:forEach>
    </table>

Estava pesquisando sobre o BufferedImage, entedi +/- q ele pode ser utilizado para guardar imagem no servidor. Entretanto,tudo para de funcionar...


Erro https://gist.github.com/njguilhem2/a6bf76b613511a18b6b9b74464d1ae16


Classe Produtos

private BufferedImage sumarioPath;
    public void setSumarioPath(BufferedImage sumarioPath) {
        this.sumarioPath = sumarioPath;
    }
public BufferedImage getSumarioPath() {
        return sumarioPath;
    }

Depois de arrumar o código, aqui fico sem saída. FileSaver


public BufferedImage write(String baseFolder, MultipartFile file) {
        try {
            String realPath = request.getServletContext().getRealPath("/"+ baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));

            return baseFolder+ "/" + file.getOriginalFilename();

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);
        } 
    }
solução!

Oi Nilton,

vc precisa mudar o caminho no ProdutosController no metodo gravar:

String path = fileSaver.write("resources/arquivos-sumario", sumario);

A pasta arquivos-sumario deve existir dentro da pasta src/main/webapp/resources:

src/main/webapp/resources/arquivos-sumario

Alem disso, vc precisa ajustar o caminho na tag img no JSP:

 <c:url value="/resources" var="resources" />

<c:forEach items="${produtos}" var="produto">
 <tr>
  <td>${produto.nome}</td>
  <td>${produto.descricao}</td>
  <td><c:url value='/${produto.sumarioPath}' /></td>
  <td><img src="${resources}/${produto.sumarioPath}"></td>
 </tr>
</c:forEach>

Espero ter errado em nada!!!

abs

Está tudo conforme suas instruções.

Stark.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

3.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Seu_madruga.jpg:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Oi Nilton, vc tem o link do projeto no github?

abs

Desculpa a bagunça professor, ainda estou aprendendo a usar o github

https://github.com/njguilhem2/Oncolorzip

Oi Nilton, vou precisar o projeto inteiro com o codigo fonte e toda estrutura dos pacotes.

Obrigado, Nico

Desculpa a demora professor, estava aprendendo a utilizar o git.

https://github.com/njguilhem2/Estudo